public static void LoadReferences(BaseModuleWeaver weaver) { _weaver = weaver; DebugWriteLineMethod = weaver.FindType("System.Diagnostics.Debug").Method("WriteLine"); StringFormatMethod = weaver.FindType("System.String").Method("Format", new string[] { "String", "Object[]" }); SystemTypeGetTypeFromHandleMethod = weaver.FindType("Type").Method("GetTypeFromHandle"); var typeDictionary = weaver.FindType("Dictionary`2"); var genericArg = new TypeReference[] { weaver.ModuleDefinition.TypeSystem.String, weaver.ModuleDefinition.TypeSystem.Object }; var genericDic = typeDictionary.MakeGenericInstanceType(genericArg); DictionaryConstructor = genericDic.Resolve().GetConstructors().FirstOrDefault(); DictionaryAddMethod = genericDic.Resolve().Method("Add"); //make ctor method has generic parms, cause Resolve() will remove generic parameters all DictionaryConstructor.DeclaringType = DictionaryConstructor.DeclaringType.MakeGenericInstanceType(genericArg); DictionaryAddMethod.DeclaringType = DictionaryAddMethod.DeclaringType.MakeGenericInstanceType(genericArg); #if DEBUG CacheAssembly = weaver.ResolveAssembly("Cache"); #else //load Cache reference var references = SplitUpReferences(weaver); AssemblyResolver = new AssemblyResolver(references); CacheAssembly = AssemblyResolver.Resolve("Cache"); #endif }
private void FindRequiredTypesAndMethods() { if (_moduleDefinition.AssemblyReferences.FirstOrDefault(x => x.Name == "Mono.Android") == null) { throw new WeavingException("Unable to find Mono.Android"); } var monoAndroidAssembly = _baseModuleWeaver.ResolveAssembly("Mono.Android"); var androidViewTypeDefinition = monoAndroidAssembly.MainModule.GetType("Android.Views.View"); AndroidViewTypeReference = _moduleDefinition.ImportReference(androidViewTypeDefinition); FindViewByIdMethodReference = _moduleDefinition.ImportReference(androidViewTypeDefinition.Methods.First(x => x.Name == "FindViewById" && !x.HasGenericParameters)); var activityTypeDefinition = monoAndroidAssembly.MainModule.GetType("Android.App.Activity"); ActivityFindViewByIdMethodReference = _moduleDefinition.ImportReference(activityTypeDefinition.Methods.First(x => x.Name == "FindViewById" && !x.HasGenericParameters)); var menuTypeDefinition = monoAndroidAssembly.MainModule.GetType("Android.Views.IMenu"); AndroidMenuTypeReference = _moduleDefinition.ImportReference(menuTypeDefinition); FindItemMethodReference = _moduleDefinition.ImportReference(menuTypeDefinition.Methods.First(x => x.Name == "FindItem")); if (_moduleDefinition.AssemblyReferences.FirstOrDefault(x => x.Name == "Polkovnik.DroidInjector") == null) { throw new WeavingException("Unable to find Polkovnik.DroidInjector"); } var droidInjectorAssembly = _baseModuleWeaver.ResolveAssembly("Polkovnik.DroidInjector"); var injectorTypeDefinition = droidInjectorAssembly.MainModule.GetType("Polkovnik.DroidInjector.Injector"); ActivityInjectViewsMethodDefinition = injectorTypeDefinition.Methods.First(x => x.Name == "InjectViews" && x.Parameters.Count == 0); InjectViewsMethodReference = injectorTypeDefinition.Methods.First(x => x.Name == "InjectViews" && x.Parameters.Count == 1); ActivityBindViewEventsMethodDefinition = injectorTypeDefinition.Methods.First(x => x.Name == "BindViewEvents" && x.Parameters.Count == 0); BindViewEventsMethodDefinition = injectorTypeDefinition.Methods.First(x => x.Name == "BindViewEvents" && x.Parameters.Count == 1); InjectMenuItemsMethodDefinition = injectorTypeDefinition.Methods.First(x => x.Name == "InjectMenuItems"); var injectorExceptionType = droidInjectorAssembly.MainModule.GetType("Polkovnik.DroidInjector.InjectorException"); InjectorExceptionCtor = _moduleDefinition.ImportReference(injectorExceptionType.Methods.First(x => x.IsConstructor)); var resourceClassType = _moduleDefinition.GetType($"{_moduleDefinition.Assembly.Name.Name}.Resource"); ResourceIdClassType = resourceClassType.NestedTypes.First(x => x.Name == "Id"); }