我有一个 asp.net 核心应用程序,这是我的设置:
services.AddSingleton(typeof(ISchedule), typeof(MySchedule));
services.AddLogging();
services.AddScheduler((sender, args) =>
{
// How do I log here?
});
不幸的是,我无法控制那个调度程序中间件,所以我只有 AddScheduler 和 lambda。
到目前为止,我唯一能想到的是:
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 中写入日志的重复,因为这是关于注入到事件处理程序中,而不是在启动对象中。)