Ядро 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, потому что речь идет о внедрении в обработчик событий, а не в объект запуска.)