public class AutofacModuleRegister : Autofac.Module { protected override void Load(ContainerBuilder builder) { var basePath = AppContext.BaseDirectory; #region 带有接口层的服务注入 var servicesDllFile = Path.Combine(basePath, "CoreCms.Net.Services.dll"); var repositoryDllFile = Path.Combine(basePath, "CoreCms.Net.Repository.dll"); if (!(File.Exists(servicesDllFile) && File.Exists(repositoryDllFile))) { var msg = "Repository.dll和Services.dll 丢失,因为项目解耦了,所以需要先F6编译,再F5运行,请检查 bin 文件夹,并拷贝。"; throw new Exception(msg); } // 获取 Service.dll 程序集服务,并注册 var assemblysServices = Assembly.LoadFrom(servicesDllFile); //支持属性注入依赖重复 builder.RegisterAssemblyTypes(assemblysServices).AsImplementedInterfaces().InstancePerDependency() .PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies); // 获取 Repository.dll 程序集服务,并注册 var assemblysRepository = Assembly.LoadFrom(repositoryDllFile); //支持属性注入依赖重复 builder.RegisterAssemblyTypes(assemblysRepository).AsImplementedInterfaces().InstancePerDependency() .PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies); #endregion } } Program.cs #region AutoFac注册============================================================================ builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()); builder.Host.ConfigureContainer<ContainerBuilder>(containerBuilder => { //获取所有控制器类型并使用属性注入 var controllerBaseType = typeof(ControllerBase); containerBuilder.RegisterAssemblyTypes(typeof(Program).Assembly) .Where(t => controllerBaseType.IsAssignableFrom(t) && t != controllerBaseType) .PropertiesAutowired(); containerBuilder.RegisterModule(new AutofacModuleRegister()); }); #endregion
标签:Autofac,controllerBaseType,批量,builder,dll,注册,var,containerBuilder,集下 From: https://www.cnblogs.com/SmallChen/p/18417933