using Autofac; using Autofac.Extras.DynamicProxy; 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 WIDESEAWCS_Core.AOP; using WIDESEAWCS_Core.BaseRepository; using WIDESEAWCS_Core.BaseServices; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_Core.LogHelper; namespace WIDESEAWCS_Core.Extensions { public class AutofacModuleRegister : Autofac.Module { protected override void Load(ContainerBuilder builder) { var basePath = AppContext.BaseDirectory; 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 { 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) { 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<UnitOfWorkManage>().As<IUnitOfWorkManage>() .AsImplementedInterfaces() .InstancePerLifetimeScope() .PropertiesAutowired(); builder.RegisterType<RequestLogModel>().InstancePerLifetimeScope(); } } }