我正在尝试将我的Serilog Logger从.NET Core Worker Service项目注入到.Net Standard 2.0库类中。但是,无论何时创建该类,它都不会接收记录器。 (默认设置为null)因此,每当尝试使用记录器时,我都会得到一个值为null的错误。
有人可以帮忙吗?下面的主机生成器
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureServices((hostContext, services) =>
{
IConfiguration configuration = hostContext.Configuration;
ConfigDto configDto = configuration.GetSection("AppSettings").Get<ConfigDto>();
services.AddSingleton(configDto);
services.AddHostedService<Service>();
})
.UseSerilog();
}
Worker项目中的类,它调用SetManager,它是.NET标准库中的类。
public Service(ConfigDto config, ILogger<Service> logger = null)
{
_logger = logger;
_logger.LogTrace("Service object created");
try
{
_logger.LogTrace("Getting config");
_config = config;
}
catch (Exception ex)
{
_logger.LogCritical("Unable to load configuration. Stopping service:\n{0}", ex.Message);
Stop();
}
_setManager = new SetManager(_config);
_setManager.ReadyToProcess += SetManager_ReadyToProcess;
}
SetManager构造函数
public SetManager(ConfigDto config, ILogger<SetManager> logger = null)
{
_logger = logger;
_config = config;
_productList = GetProducts();
_timer.Interval = 3000;
_timer.Elapsed += Timer_Elapsed;
}
如果Logger类对象为“ null”,则无法访问其属性,因此无法进行日志记录。如果记录器对象为空,而您想记录他,则可以使用其他来源。
根据您的评论
Service类使记录器注入良好。它的布景经理没有接收记录器的类。
如果不通过,如何接收?
_setManager = new SetManager(_config);
更改为
_setManager = new SetManager(_config, _logger);