Внедрение пользовательских журналов ядра ASP.NET - PullRequest
0 голосов
/ 21 мая 2019

В моем старом (хорошо «традиционном») проекте я был зависим от ядра NInject и Log4Net и делал для журнала что-то вроде этого:

kernel.Bind<ILog>().ToMethod((ctx) =>
{
    return LogManager.GetLogger(ctx.Request.Target.Member.DeclaringType);
});

то есть я связываю фабрику журналов с функцией, и эта функция может автоматически связывать текущий тип, создавая журнал для текущего типа. В конфигурации ASP.NET я нашел способ привязать сервис к фабричной функции, но эта функция не будет получать никакой контекстной информации, чтобы понять контекст, в котором нужен объект. Можно ли каким-то образом эмулировать то же поведение, которое я имел с NInject?

1 Ответ

1 голос
/ 21 мая 2019

В ASP.NET Core ведение журнала и внедрение зависимостей встроены прямо в среду.Таким образом, вы можете получить зависимость конструктора от ILogger от T, где T - это тип вашего класса, в который будет введен регистратор.

т.е.

public class HomeController
{
    public HomeController(ILogger<HomeController> logger)
    {
       _log = logger;
    }

    private readonly ILogger _log;


}

Вы можете использовать различные библиотеки журналов, ноlog4net обычно не используется в ядре asp.net, serilog, похоже, является последним фаворитом.См. Список сторонних регистраторов в документации для ядра asp.net

Аналогично DI встроен прямо в , но его также можно заменить на 3-ийсторонние библиотеки DI, как показано в разделе «Замена контейнера службы по умолчанию. В настоящее время Autofac кажется более популярным, чем ninject.

...