Как указать конфигурацию NLog в зависимости от среды, используя внедрение основных зависимостей? - PullRequest
0 голосов
/ 24 сентября 2019

Я использую ядро ​​.net с 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 голосов
/ 24 сентября 2019

Никогда не использовал внедрение зависимостей, но при чтении руководства вы используете интерфейсы, а затем регистрируете конкретную реализацию интерфейса.

Это конкретная реализация:

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

Поскольку вымы говорим о NetCore и внедрении зависимостей (без указания какого-либо конкретного контейнера зависимостей-инъекций), тогда, я думаю, вам следует использовать Microsoft Dependency Injection и Microsoft Extension Logging (MEL).

См. этот пример, чтобы настроить NLog какРеализация LoggingProvider, а затем использование MEL-ILogger-интерфейсов:

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

Обратите внимание, как реализация настраивается при запуске (вместе с настройкой контейнера-зависимости-инъекции), изатем все бизнес-логические классы приобретают ILogger-интерфейсы для выполнения своей регистрации (в любой реализации, зарегистрированной в контейнере для зависимостей-инъекций).

...