【问题标题】:inject all services in startup.cs, .net core, overloaded在startup.cs,.net core中注入所有服务,重载
【发布时间】:2021-12-28 19:49:47
【问题描述】:

这是一个比较笼统的问题。

但是我有一个关于在 startup.cs 中注入服务的问题:

public void ConfigureServices(IServiceCollection services)
        {            

            services.AddControllers(opt =>
            {
                var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
                opt.Filters.Add(new AuthorizeFilter(policy));
            })
                .AddFluentValidation(config =>
            {
                config.RegisterValidatorsFromAssemblyContaining<Create>();
            });
            services.AddApplicationServices(Configuration);
            services.AddIdentityServices(Configuration);           
        }

所以无论如何我将服务拆分到其他文件中:

public static class StartupExtensionClass
    {
        public static IServiceCollection AddApplicationServices(this IServiceCollection services,
            IConfiguration Configuration)
        {

            services.AddSwaggerGen(c =>
          {
              c.SwaggerDoc("v1", new OpenApiInfo { Title = "API", Version = "v1" });
          });

            services.AddDbContext<DataContext>(options =>
              options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

            services.AddCors(opt =>
            {
                opt.AddPolicy("CorsPolicy", policy =>
                {

                    policy.AllowAnyMethod().AllowAnyHeader().WithOrigins("http://localhost:3000");


                });
            });

            services.AddMediatR(typeof(List.Handler).Assembly);
            services.AddAutoMapper(typeof(MappingProfiles).Assembly);
            services.AddScoped<IUserAccessor, UserAccessor >();
            services.AddScoped<IPhotoAccessor, PhotoAccessor>();
            services.Configure<CloudinarySettings>(Configuration.GetSection("Cloudinary"));

            return services;

        }

但是,例如,如果您有数百个服务。这不是在启动阶段使应用程序过载吗?

因为一开始所有的服务都会初始化。

有没有办法在直接调用某些服务时初始化它们。

喜欢延迟加载

谢谢

【问题讨论】:

  • 向 DI 容器注册依赖项不会实例化对象。实际上,这些将按请求(范围)或按使用(瞬态)建立。以这种方式注册它们只是告诉 .Net 在调用它们时如何解析接口的实现。

标签: c# asp.net-core


【解决方案1】:

我相信您只是在设置运行时将在请求指定类型的类时使用什么......您不会立即创建这些类。因此,如果您的应用程序刚刚启动,但您从未向它发出任何请求,那并不是无缘无故地实例化了 100 个类。

【讨论】:

  • 啊,好吧。是的,你是对的。然后我没有完全理解。感谢您的反馈。
猜你喜欢
  • 1970-01-01
  • 2020-04-24
  • 1970-01-01
  • 2021-09-05
  • 1970-01-01
  • 2020-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多