using Autofac; using Autofac.Extras.DynamicProxy; using log4net; using Microsoft.Extensions.DependencyModel; 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()); builder.RegisterType().As() .AsImplementedInterfaces() .InstancePerLifetimeScope() .PropertiesAutowired(); } } }