ASP.NET 核心 - 启动 class 和 ILoggerFactory 的依赖注入
ASP.NET Core - StartUp class and Dependency Injection with ILoggerFactory
我正在使用 ASP.NET Core 2.1 和 NLog。如果我在 StartUp 中添加一个依赖于 ILoggerFactory 的构造函数,它会将其解析为与我在 Configure 方法中获得的实例不同的实例。在 Configure 方法中,我调用了 AddNLog,因为它是一个不同的实例,所以我在 ConfigureServices 中使用的实例还没有为 NLog 做好准备。
知道如何在 ConfigureService 中访问 ILoggerFactory 并在 Configure 中拥有相同的实例以便调用 AddNLog 吗?在 ConfigureServices 中调用 AddNLog 不起作用。
我不确定我是否理解了这个问题,但你就不能像 explained here:
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
ILoggerFactory loggerFactory)
{
//...
loggerFactory.AddLog4Net(); // << Add this line
我通过在应用程序启动事件中注册一些代码解决了这个问题。
在配置方法中:
appLifetime.ApplicationStarted.Register(() =>
{
InitializeSingletonObjects(app, loggerFactory);
});
此时一切都已正确初始化,您可以在 InitializeSingletonObjects 中做任何您想做的事情。就我而言,这就是我所做的。
private void InitializeSingletonObjects(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
// email template processor
var emailRepository = app.ApplicationServices.GetService<IEmailRepository>();
IEmailTemplateProcessor emailTemplateProcessor = app.ApplicationServices.GetService<IEmailTemplateProcessor>();
string containerName = appConfiguration.AzureBlobStorage.BlobStorageContainerEmailTemplates;
var emailTemplates = emailRepository.GetEmailTemplates(true);
emailTemplateProcessor.Initialize(containerName, emailTemplates);
}
有关 https://www.khalidabuhakmeh.com/looking-at-asp-net-cores-iapplicationlifetime
上 IApplicationLifetime 的更多信息
我正在使用 ASP.NET Core 2.1 和 NLog。如果我在 StartUp 中添加一个依赖于 ILoggerFactory 的构造函数,它会将其解析为与我在 Configure 方法中获得的实例不同的实例。在 Configure 方法中,我调用了 AddNLog,因为它是一个不同的实例,所以我在 ConfigureServices 中使用的实例还没有为 NLog 做好准备。
知道如何在 ConfigureService 中访问 ILoggerFactory 并在 Configure 中拥有相同的实例以便调用 AddNLog 吗?在 ConfigureServices 中调用 AddNLog 不起作用。
我不确定我是否理解了这个问题,但你就不能像 explained here:
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
ILoggerFactory loggerFactory)
{
//...
loggerFactory.AddLog4Net(); // << Add this line
我通过在应用程序启动事件中注册一些代码解决了这个问题。
在配置方法中:
appLifetime.ApplicationStarted.Register(() =>
{
InitializeSingletonObjects(app, loggerFactory);
});
此时一切都已正确初始化,您可以在 InitializeSingletonObjects 中做任何您想做的事情。就我而言,这就是我所做的。
private void InitializeSingletonObjects(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
// email template processor
var emailRepository = app.ApplicationServices.GetService<IEmailRepository>();
IEmailTemplateProcessor emailTemplateProcessor = app.ApplicationServices.GetService<IEmailTemplateProcessor>();
string containerName = appConfiguration.AzureBlobStorage.BlobStorageContainerEmailTemplates;
var emailTemplates = emailRepository.GetEmailTemplates(true);
emailTemplateProcessor.Initialize(containerName, emailTemplates);
}
有关 https://www.khalidabuhakmeh.com/looking-at-asp-net-cores-iapplicationlifetime
上 IApplicationLifetime 的更多信息