迁移项目改用.Net Core5.0遇到依赖注入嫌麻烦,找的方法批量集成注册方法。注意Service层命名规范化只做了一次过滤:
依赖注入批量注册代码:
public class AddStartupService { /// <summary> /// 依赖注入批量注册 /// </summary> /// <param name="service"></param> /// <param name="assemblyName"></param> /// <param name="serviceLifetime"></param> public static void AddService(IServiceCollection service, string assemblyName = "Manage_Service", ServiceLifetime serviceLifetime = ServiceLifetime.Transient) { //通过程序集的名称加载程序集 var assembly = GetAssemblyByName(assemblyName); var types = assembly.GetTypes(); //Service注入过滤 var list = types.Where(u => u.IsClass && !u.IsAbstract && !u.IsGenericType && u.Name.Contains("Service")).ToList(); foreach (var type in list) { var interfaceList = type.GetInterfaces(); if (interfaceList.Any()) { //Service和Iservice命名规则须一致 var inter = interfaceList.Where(j => j.Name.Contains(type.Name)).First(); switch (serviceLifetime) { case ServiceLifetime.Transient: service.AddTransient(inter, type); break; case ServiceLifetime.Scoped: service.AddScoped(inter, type); break; case ServiceLifetime.Singleton: service.AddSingleton(inter, type); break; } } } } /// <summary> /// //通过程序集的名称加载程序集 /// </summary> /// <param name="assemblyName"></param> /// <returns></returns> public static Assembly GetAssemblyByName(string assemblyName) { return AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName(assemblyName)); } }
startup里面注册:
public void ConfigureServices(IServiceCollection services) { services.AddControllers(); #region Swagger //注册Swagger生成器,定义一个和多个Swagger 文档 services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Version = "v1", Title = "信息化管理平台", Description = "信息化管理平台" }); }); #endregion #region 客户端IP //获取客户端 IP services.Configure<ForwardedHeadersOptions>(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; options.KnownNetworks.Clear(); options.KnownProxies.Clear(); }); #endregion #region 依赖注入 AddStartupService.AddService(services); services.AddMvc(); #endregion }