//using dnlib.DotNet; //using System; //using System.Collections.Generic; //using System.Linq; //using System.Text; //using System.Threading.Tasks; //namespace Obfuz.Emit //{ // public interface IModuleMetadataImporter // { // void Init(ModuleDef mod); // } // public abstract class ModuleMetadataImporterBase : IModuleMetadataImporter // { // public abstract void Init(ModuleDef mod); // } // public class MetadataImporter // { // private readonly Dictionary<(ModuleDef, Type), IModuleMetadataImporter> _customModuleMetadataImporters = new Dictionary<(ModuleDef, Type), IModuleMetadataImporter>(); // public static MetadataImporter Instance { get; private set; } // public static void Reset() // { // Instance = new MetadataImporter(); // } // public DefaultModuleMetadataImporter GetDefaultModuleMetadataImporter(ModuleDef module) // { // return GetCustomModuleMetadataImporter(module); // } // public List GetDefaultModuleMetadataImporters() // { // return GetCustomModuleMetadataImporters(); // } // public T GetCustomModuleMetadataImporter(ModuleDef module, Func creator = null) where T : IModuleMetadataImporter // { // var key = (module, typeof(T)); // if (!_customModuleMetadataImporters.TryGetValue(key, out var importer)) // { // if (creator != null) // { // importer = creator(module); // } // else // { // importer = (IModuleMetadataImporter)Activator.CreateInstance(typeof(T)); // } // importer.Init(module); // _customModuleMetadataImporters[key] = importer; // } // return (T)importer; // } // public List GetCustomModuleMetadataImporters() // { // var result = new List(); // foreach (var kvp in _customModuleMetadataImporters) // { // if (kvp.Key.Item2 == typeof(T)) // { // result.Add((T)kvp.Value); // } // } // return result; // } // } //}