У меня есть сетевое приложение .Net, которое я пытаюсь добавить в журнал через NLog. В предыдущих проектах, я просто использовал что-то вроде следующего в верхней части каждого класса:Инъекция зависимостей с NLog
private static Logger logger = LogManager.GetCurrentClassLogger();
Я пытаюсь следовать более передовому опыту с этим проектом, где это возможно.
Вопрос в том, как я могу вставить регистратор, который имеет полное имя класса, в который он вводится?
В моем файле startup.cs, до сих пор я получил следующее:
services.AddScoped<BLL.Logging.NLogLogger>();
На данный момент NLogLogger
класс создает экземпляр NLog Logger через GetCurrentClassLogger()
, которая при использовании будет только когда-либо сообщите имя как «BLL.Logging.NLogLogger», а не фактический класс, в который вводится регистратор.
Чтобы упростить вопрос и сделать его более универсальным: Как вы можете передать имя класса, в котором .Net Core собирается ввести класс?
Я думал о чем-то вроде ниже, но не знает, как достичь этого:
services.AddScoped<BLL.Logging.NLogLogger>(serviceProvider => new BLL.Logging.NLogLogger("class name here"));
Вы не можете.Это невозможно сделать с помощью встроенного контейнера ASP.NET Core. Для этого вам понадобится «реальный» контейнер DI, например Autofac или Simple Injector. – Steven