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(); 
 | 
        } 
 | 
    } 
 | 
} 
 |