【发布时间】:2019-11-22 17:53:06
【问题描述】:
我刚刚从另一个项目粘贴了最后的 4 行,它可以工作,但我收到警告。我显然对 DI 理解不够好……它想让我改变什么?
public void ConfigureServices(IServiceCollection services)
{
if (HostingEnvironment.EnvironmentName == "Local")
{
services.AddHealthChecksUI()
.AddHealthChecks()
.AddCheck<TestWebApiControllerHealthCheck>("HomePageHealthCheck")
.AddCheck<DatabaseHealthCheck>("DatabaseHealthCheck");
}
services.Configure<PwdrsSettings>(Configuration.GetSection("MySettings"));
services.AddDbContext<PwdrsContext>(o => o.UseSqlServer(Configuration.GetConnectionString("PwdrsConnectionRoot")));
services.AddMvc(o =>
{
o.Filters.Add<CustomExceptionFilter>();
});
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy", b => b
.SetIsOriginAllowed((host) => true)
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});
services.AddSwaggerDocument();
services.AddHttpContextAccessor();
services.AddAutoMapper(typeof(ObjectMapperProfile));
services.AddTransient<IEmailSender, EmailSender>();
services.AddScoped(typeof(IAppLogger<>), typeof(LoggerAdapter<>));
services.AddScoped(typeof(IAsyncRepository<>), typeof(Repository<>));
services.AddScoped<IRfReportTypeRepository, RfReportTypeRepository>();
services.AddScoped<IRfReportRepository, RfReportRepository>();
services.AddScoped<IRfReportLookupsService, RfReportLookupsService>();
services.AddScoped<IRfReportService, RfReportService>();
services.Configure<RAFLogging>(Configuration.GetSection("RAFLogging"));
ServiceProvider serviceProvider = services.BuildServiceProvider(); //WARNING IS HERE
IOptions<RAFLogging> RAFLogger = serviceProvider.GetRequiredService<IOptions<RAFLogging>>();
RegisterSerilogLogger logger = new RegisterSerilogLogger(RAFLogger);
}
【问题讨论】:
-
首先,您为什么要构建提供程序?这可能是XY problem。您能否重新格式化问题,以便我们更清楚地了解当前问题以及您实际上想要做什么?
-
我不确定。我想我已经有了一个,也许正在创造另一个?
-
WARNING IS HERE是什么意思?请提供有关警告的详细信息。向我们展示警告的文本。这是编译器警告吗?来自某些代码分析插件的警告?如果有,是哪一个?这是运行时异常吗?向我们展示异常的所有相关细节(消息、类型、堆栈跟踪、内部异常)。 -
@punkouter "它想让我改变什么":不要通过调用
BuildServiceProvider()手动构建服务提供者。这个方法应该只被 Host 调用一次。重复的服务提供者可能会导致一些意想不到的错误。 -
警告是标题。我想 IServiceCollection 是我应该把这个记录器放在哪里?我需要更好地了解 IServiceCollection 与 ServiceProvider。
标签: c# asp.net-core dependency-injection