如何使用核心依赖注入按环境指定NLog的配置?

时间:2019-09-24 08:24:18

标签: asp.net-core dependency-injection nlog

我正在将.net core与NLog一起使用,并尝试根据环境实现不同的设置 使用静态初始化,我可以通过使用

private static NLog.Logger log =
    NLog.Web.NLogBuilder.ConfigureNLog(Startup.NLogConfig).GetCurrentClassLogger();

其中Startup.NLogConfig在启动类上初始化的方式是

if (env.IsDevelopment())
    NLogConfig = "nlog.file.config";
else
    NLogConfig = "nlog.blob.config";

但是我不知道如何为依赖注入指定它:

public SomeController(ILogger<SomeController> log)
{
   // log needs to be initialized using the right config based on the environment context
}

1 个答案:

答案 0 :(得分:0)

从未使用过依赖注入,但是在阅读手册时,您先使用接口,然后注册该接口的具体实现。

这是具体的实现:

NLog.Web.NLogBuilder.ConfigureNLog(Startup.NLogConfig).GetCurrentClassLogger();

由于您正在谈论NetCore和依赖项注入(未指定任何特定的依赖项注入容器),所以我猜您应该使用Microsoft依赖项注入和Microsoft Extension Logging(MEL)。

有关如何将NLog设置为LoggingProvider-implementation,然后使用MEL-ILogger-interface,请参见以下示例:

https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-2#4-update-programcs

请注意在启动时如何配置实现(以及设置依赖项注入容器),然后所有业务逻辑类都获取ILogger接口以执行其日志记录(登录到依赖项注入中注册的任何实现) -容器)。