| 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<Type>(); | 
|   | 
|             builder.RegisterType<LogAOP>(); | 
|             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<RuntimeLibrary> compilationLibrary = DependencyContext.Default | 
|                     .RuntimeLibraries | 
|                     .Where(x => !x.Serviceable && x.Type == "project") | 
|                     .ToList(); | 
|   | 
|             List<Assembly> assemblyList = new List<Assembly>(); | 
|             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<UnitOfWorkManage>().As<IUnitOfWorkManage>() | 
|                .AsImplementedInterfaces() | 
|                .InstancePerLifetimeScope() | 
|                .PropertiesAutowired(); | 
|         } | 
|     } | 
| } |