.Net Core5.0 集成注册依赖注入

迁移项目改用.Net Core5.0遇到依赖注入嫌麻烦,找的方法批量集成注册方法。注意Service层命名规范化只做了一次过滤:

.Net Core5.0 集成注册依赖注入

 

 依赖注入批量注册代码:

 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
        }

 

.Net Core5.0 集成注册依赖注入

上一篇:Apache Solr SSRF (CVE-2021-27905)复现


下一篇:JS中every()和some()的用法