AutoFac自动注入的实现过程
IDependency 依赖注入接口,表示该接口的实现类将自动注册到IoC容器中
//autofac builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()); builder.Host.ConfigureContainer<ContainerBuilder>(builder => { #region 手动注入 ////手动注入 //builder.RegisterType<AService>().As<IAService>().InstancePerLifetimeScope(); //builder.RegisterType<BService>().As<IBService>().InstancePerLifetimeScope(); #endregion #region 自动注入 //4、自动注册接口 //* 筛选出对应条件的接口 //* IsAssignableFrom:返回true的条件:是否直接或间接实现了IDependency //* IsAbstract:是否为抽象类 //* AsImplementedInterfaces:以接口的形式注册 //* InstancePerLifetimeScope:同一个Lifetime生成的对象是同一个实例 //Assembly assembly = Assembly.Load(Assembly.GetExecutingAssembly().GetName().Name); //var dataAccess = Assembly.GetExecutingAssembly(); //var assemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();//这种写法AppDomain重新启动后会丢失程序集 ////第一种 /* 获取接口类型 *通过IDependency标记需要依赖注入的接口 *注册所有实现了IDependency接口的类型 */ //Type type = typeof(IDependency); //var dataAccess = Assembly.GetExecutingAssembly(); //builder.RegisterAssemblyTypes(Assembly.Load("Dn.Core.Services")) // .Where(t => t.Name.EndsWith("Service"))//.As<IDependency>() // .AsImplementedInterfaces().InstancePerDependency(); ////第二种 //Type baseType = typeof(IDependency); ////var assemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();//这种写法AppDomain重新启动后会丢失程序集 //var assembly = Assembly.Load("Dn.Core.Services");//Assembly.GetEntryAssembly(); //builder.RegisterAssemblyTypes(assembly) // .Where(t => baseType.IsAssignableFrom(t) && t != baseType) // .AsImplementedInterfaces().InstancePerLifetimeScope(); #endregion });
但是实际上,很多项目都会把项目分到其他的类库里面,如果使用Assembly.GetEntryAssembly();,放到其他的项目里面的可以被注入的类就无法被注入了,所以需要手动去加载其他的程序集,当然也可以用代码去扫描一下,
AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName("程序集名称"));
autofac的RegisterAssemblyTypes方法参数是一个数组,把需要注入的程序集加载起来,拼成一个数组,传递进去就可以实现在.Net Core下的跨程序集加载了
https://www.cnblogs.com/boxrice/p/8301666.html
https://blog.csdn.net/weixin_39926042/article/details/112812936?spm=1001.2101.3001.6650.10&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ELandingCtr%7EHighlightScore-10.queryctrv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ELandingCtr%7EHighlightScore-10.queryctrv2&utm_relevant_index=11