using Autofac; using Autofac.Extras.DynamicProxy; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using CoreCms.Net.Configuration; using CoreCms.Net.Core.AOP; using CoreCms.Net.Utility.Extensions; using Microsoft.AspNetCore.Mvc; using NLog; namespace CoreCms.Net.Core.AutoFac { 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); } // AOP 开关,如果想要打开指定的功能,只需要在 appsettigns.json 对应对应 true 就行。 //var cacheType = new List(); //if (AppSettingsConstVars.RedisConfigEnabled) //{ // builder.RegisterType(); // cacheType.Add(typeof(RedisCacheAop)); //} //else //{ // builder.RegisterType(); // cacheType.Add(typeof(MemoryCacheAop)); //} // 获取 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); // 获取 Service.dll 程序集服务,并注册 //var assemblysServices = Assembly.LoadFrom(servicesDllFile); //builder.RegisterAssemblyTypes(assemblysServices) // .AsImplementedInterfaces() // .InstancePerDependency() // .PropertiesAutowired() // .EnableInterfaceInterceptors()//引用Autofac.Extras.DynamicProxy; // .InterceptedBy(cacheType.ToArray());//允许将拦截器服务的列表分配给注册。 //// 获取 Repository.dll 程序集服务,并注册 //var assemblysRepository = Assembly.LoadFrom(repositoryDllFile); //builder.RegisterAssemblyTypes(assemblysRepository) // .AsImplementedInterfaces() // .PropertiesAutowired() // .InstancePerDependency(); #endregion } } }