這是 .NET 6 中的 ASP.NET 應用程式。有一個向導界面,用戶在其中輸入一些資料,然后根據輸入,我設定了一個新的依賴注入容器,其中包含完成任務所需的服務。我的問題是ILogger<>來自第二個容器的實體不使用ILoggingProvider我設定的自定義。
程式.cs:
var builder = WebApplication.CreateBuilder(args);
builder.Logging.ClearProviders();
builder.Logging.AddDebug();
builder.Logging.AddSignalRLogging();
public static class ILoggingBuilderExtensions
{
public static ILoggingBuilder AddSignalRLogging(this ILoggingBuilder builder)
=> builder.AddProvider(new SignalRLoggerProvider(builder.Services))
.AddFilter<SignalRLoggerProvider>("MyNamespace", LogLevel.Information);
}
該SignalRLoggerProvider來源于如何實作一個ILogger將訊息發送到一個SignalR集線器?.
控制器:
IServiceCollection services = new ServiceCollection();
services.AddLogging();
services.AddSignalR();
services.AddSingleton(_sheetsClient); // this was injected into the controller
services.AddSingleton<ITeamReaderService>(new PostedTeamReaderService(model.Divisions));
string[] divisionNames = model.Divisions.Keys.ToArray();
foreach (string divisionName in divisionNames)
{
services.AddSingleton<IDivisionSheetService>(provider => new DivisionSheetService(divisionName,
provider.GetRequiredService<StandingsRequestCreatorFactory>(),
provider.GetRequiredService<ISheetsClient>(),
provider.GetRequiredService<IOptionsMonitor<ScoreSheetConfiguration>>(),
provider.GetRequiredService<ILogger<DivisionSheetService>>())
);
}
我知道我的提供程式可以正常作業,因為當我將依賴項從 HostBuilder 的服務集合 ( _sheetsClient)注入的控制器中記錄內容時,這些訊息可以正常作業。在來自另一個容器 ( DivisionSheetService) 的類中,這些日志訊息無處可去,當我ILogger在除錯器中查看實體時,它表明它沒有正在寫入的記錄器。
所以肯定是我的自定義日志記錄提供程式對第二個容器是未知的,但我不知道如何在那里注冊它。
提前致謝。
uj5u.com熱心網友回復:
由于您是ServiceCollection從頭開始創建新的,因此您還需要從頭開始添加日志記錄基礎架構:
IServiceCollection services = new ServiceCollection();
services.AddLogging(builder => builder.AddDebug().AddSignalRLogging());
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/404839.html
標籤:
