【发布时间】: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