dengjunjie
2025-02-24 cde56aae50adc11ff8db84e424d873843c566bfd
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_Core/Extensions/AutofacModuleRegister.cs
@@ -1,6 +1,5 @@
using Autofac;
using Autofac.Extras.DynamicProxy;
using log4net;
using Microsoft.Extensions.DependencyModel;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using System;
@@ -14,6 +13,7 @@
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Helper;
using WIDESEA_Core.LogHelper;
namespace WIDESEA_Core.Extensions
{
@@ -22,10 +22,14 @@
        //private static readonly ILog log = LogManager.GetLogger(typeof(AutofacModuleRegister));
        protected override void Load(ContainerBuilder builder)
        {
            var basePath = AppContext.BaseDirectory;
            var cacheType = new List<Type>();
            builder.RegisterType<LogAOP>();
            cacheType.Add(typeof(LogAOP));
            if (AppSettings.app("LogAopEnable").ObjToBool())
            {
                cacheType.Add(typeof(LogAOP));
            }
            builder.RegisterGeneric(typeof(RepositoryBase<>)).As(typeof(IRepository<>)).InstancePerDependency();//注册仓储
            builder.RegisterGeneric(typeof(ServiceBase<,>)).As(typeof(IService<>)).InstancePerDependency();//注册服务
@@ -34,15 +38,22 @@
            List<RuntimeLibrary> compilationLibrary = DependencyContext.Default
                    .RuntimeLibraries
                    .Where(x => !x.Serviceable && x.Type == "project")
                    .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)));
                    string path = Path.Combine(basePath, $"{library.Name}.dll");
                    if (!File.Exists(path))
                    {
                        var msg = $"{library.Name}.dll丢失,因为项目解耦了,所以需要先F6编译,再F5运行,请检查 bin æ–‡ä»¶å¤¹ï¼Œå¹¶æ‹·è´ã€‚";
                        //log.Error(msg);
                        throw new Exception(msg);
                    }
                    assemblyList.Add(Assembly.LoadFrom(path));
                }
                catch (Exception ex)
                {
@@ -53,26 +64,16 @@
            builder.RegisterAssemblyTypes(assemblyList.ToArray()).Where(x => !x.IsInterface && !x.IsAbstract && baseType.IsAssignableFrom(x))
                        .AsImplementedInterfaces()
                        .PropertiesAutowired()
                        .InstancePerDependency()
                        .EnableInterfaceInterceptors()
                        .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();
            builder.RegisterType<RequestLogModel>().InstancePerLifetimeScope();
        }
    }
}