Ядро Asp.net: внедрение в обработчик событий?

У меня есть основное приложение asp.net, и это моя установка:

services.AddSingleton(typeof(ISchedule), typeof(MySchedule));
services.AddLogging();
services.AddScheduler((sender, args) =>
{
    // How do I log here?
});

К сожалению, я не могу контролировать это промежуточное ПО планировщика, так что AddScheduler и лямбда - это все, что у меня есть.

Пока единственное, что мне удалось придумать, это:

services.AddSingleton(typeof(ISchedule), typeof(MySchedule));
services.AddLogging();

IServiceProvider serviceProvider = services.BuildServiceProvider();
services.AddScheduler((sender, args) =>
{
    ILogger<ISchedule> logger = serviceProvider.GetService<ILogger<ISchedule>>();
    logger.LogError(args.Exception, "Uncaught exception during processing");
    args.SetObserved();
});

Но это просто еще один способ проникнуть в своего рода "ServiceLocator" через закрытие.

Есть ли лучшие идеи? Как это должно быть идеально обработано?

(Это не дублирование того, как я пишу логи из Startup.cs, потому что речь идет о внедрении в обработчик событий, а не в объект запуска.)

0 ответов

Другие вопросы по тегам