private void ImportRuntimeModuleDictionary(ModuleDefinition module, TypeReference tDict) { var tFuncOfModule = FuncOfT.MakeGenericInstanceType(RuntimeModule); var tModuleDict = tDict.MakeGenericInstanceType(Type, tFuncOfModule); DictionaryOfTypeToModuleFn = module.Import(tModuleDict); DictionaryOfTypeToModuleFn_New = module.Import(tModuleDict.Resolve() .GetDefaultConstructor()) .MakeHostInstanceGeneric(Type, tFuncOfModule); DictionaryOfTypeToModuleFn_Add = module.Import(tModuleDict.Resolve().GetMethod("Add")).MakeHostInstanceGeneric(Type, tFuncOfModule); DictionaryOfTypeToModuleFn_TryGetValue = module.Import(tModuleDict.Resolve().GetMethod("TryGetValue")) .MakeHostInstanceGeneric(Type, tFuncOfModule); }
private void ImportInjectBindingDictionary(ModuleDefinition module, TypeReference tDict) { var tFuncOfBinding = FuncOfT.MakeGenericInstanceType(Binding); var tDictOfStringToBindingFn = tDict.MakeGenericInstanceType( String, tFuncOfBinding); DictionaryOfStringToBindingFn = tDictOfStringToBindingFn; DictionaryOfStringToBindingFn_New = module.Import( tDictOfStringToBindingFn.Resolve() .Methods .First( c => c.Name == ".ctor" && c.Parameters.Count == 1 && c.Parameters[0].ParameterType.Name.StartsWith("IEqualityComparer"))) .MakeHostInstanceGeneric(String, tFuncOfBinding); DictionaryOfStringToBindingFn_Add = module.Import(tDictOfStringToBindingFn.Resolve().GetMethod("Add")) .MakeHostInstanceGeneric(String, tFuncOfBinding); DictionaryOfStringToBindingFn_TryGetValue = module.Import(tDictOfStringToBindingFn.Resolve().GetMethod("TryGetValue")) .MakeHostInstanceGeneric(String, tFuncOfBinding); }