using Autofac; using Autofac.Extras.DynamicProxy; using log4net; using Microsoft.Extensions.DependencyModel; using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Runtime.Loader; using System.Text; using System.Threading.Tasks; using WIDESEA_Core.AOP; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Helper; namespace WIDESEA_Core.Extensions { public class AutofacModuleRegister : Autofac.Module { //private static readonly ILog log = LogManager.GetLogger(typeof(AutofacModuleRegister)); protected override void Load(ContainerBuilder builder) { var cacheType = new List(); //builder.RegisterType(); //cacheType.Add(typeof(LogAOP)); builder.RegisterGeneric(typeof(RepositoryBase<>)).As(typeof(IRepository<>)).InstancePerDependency();//注册仓储 builder.RegisterGeneric(typeof(ServiceBase<,>)).As(typeof(IService<>)).InstancePerDependency();//注册服务 Type baseType = typeof(IDependency); List compilationLibrary = DependencyContext.Default .RuntimeLibraries .Where(x => !x.Serviceable && x.Type == "project") .ToList(); List assemblyList = new List(); foreach (var library in compilationLibrary) { try { assemblyList.Add(AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName(library.Name))); } catch (Exception ex) { Console.WriteLine(library.Name + ex.Message); } } builder.RegisterAssemblyTypes(assemblyList.ToArray()).Where(x => !x.IsInterface && !x.IsAbstract && baseType.IsAssignableFrom(x)) .AsImplementedInterfaces() .PropertiesAutowired() .InstancePerDependency() .EnableInterfaceInterceptors() .InterceptedBy(cacheType.ToArray()); //foreach (var assembly in assemblyList) //{ // foreach (var type in assembly.GetTypes()) // { // if (!type.IsInterface && !type.IsAbstract && baseType.IsAssignableFrom(type)) // { // Console.WriteLine($"注册类型: {type.FullName}"); // } // } //} builder.RegisterType().As() .AsImplementedInterfaces() .InstancePerLifetimeScope() .PropertiesAutowired(); } } }