using Admin.Core.Aop; using Admin.Core.Common.Configs; using Admin.Core.Repository; using Autofac; using Autofac.Extras.DynamicProxy; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Module = Autofac.Module; namespace Admin.Core.RegisterModules { public class ServiceModule : Module { private readonly AppConfig _appConfig; private readonly string _assemblyName; private readonly string _suffixName; /// /// 服务注入 /// /// AppConfig /// 程序集名称 /// 后缀名 public ServiceModule(AppConfig appConfig, string assemblyName = "Admin.Core.Service", string suffixName = "Service") { _appConfig = appConfig; _assemblyName = assemblyName; _suffixName = suffixName; } protected override void Load(ContainerBuilder builder) { //事务拦截 var interceptorServiceTypes = new List(); if (_appConfig.Aop.Transaction) { builder.RegisterType(); builder.RegisterType(); interceptorServiceTypes.Add(typeof(TransactionInterceptor)); } //服务 var assemblyServices = Assembly.Load(_assemblyName); builder.RegisterAssemblyTypes(assemblyServices) .Where(a => a.Name.EndsWith(_suffixName)) .AsImplementedInterfaces() .InstancePerLifetimeScope() .PropertiesAutowired()// 属性注入 .InterceptedBy(interceptorServiceTypes.ToArray()) .EnableInterfaceInterceptors(); } } }