別のプロジェクトの最後に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);
}
2
まず、なぜプロバイダーを構築しているのですか?これはXYの問題である可能性があります。現在の問題と実際に何をしようとしているのかをより明確に把握できるように、質問を再フォーマットできますか?
—
Nkosi
よく分かりません。私はすでに持っていると思いますが、おそらくそれが別のものを作成していますか?
—
punkouter
どういう意味
—
スティーブン
WARNING IS HERE
ですか?警告の詳細を入力してください。警告のテキストを見せてください。これはコンパイラの警告ですか?一部のコード分析プラグインからの警告?もしそうなら、どれですか?これはランタイム例外ですか?例外に関連するすべての詳細(メッセージ、タイプ、スタックトレース、内部例外)を表示します。
@punkouter「何を変更する必要があるか」:を呼び出してサービスプロバイダーを手動で構築しないでください
—
itminus
BuildServiceProvider()
。このメソッドは、ホストによって1回だけ呼び出される必要があります。サービスプロバイダーが重複していると、予期しないバグが発生する可能性があります。
警告はタイトルです。IServiceCollectionは、このロガーをどこかに配置する必要があると思いますか?IServiceCollectionとServiceProviderをよく理解する必要があります。
—
punkouter