在没有DI的情况下从program.cs中访问WebApplication/Services



好的,我愿意被告知我正在错误地处理问题,所以如果是这种情况,请继续,但是我有一个未处理的异常提供程序,我要添加到我的构建器中。cs中的服务,以及一些数据服务。我想不出一个好方法来添加一个现有的数据服务到未处理的异常提供程序(自定义日志到数据库通过数据服务)。

我曾尝试传递它,或通过注入使用它,但在异常提供程序中,数据服务在实践中一直显示为null。

所以我在想,有没有一种方法可以从正在运行的程序的其他地方获得对正在运行的WebApplication的引用(我们通过program. cs中的app.Run()运行的web应用程序)。

逻辑上,我想在未处理的异常提供程序中做这样的事情:

MyService = GetRunningApp().services.BuildServiceProvider().GetService<IMyService>();

我错过了一个更简单的方法吗?

在Blazor中,不像在Web API中那样容易注入中间件来进行全局错误处理(如果我错了请纠正我!)

对于Blazor,我认为我们最接近的是<ErrorBoundary>。看看Alamakanambra的解决方案。它们提供了如何创建处理全局异常的组件的示例。你可以在OnErrorAsync中做任何你需要的日志或处理。

protected override Task OnErrorAsync(Exception exception)
{
receivedExceptions.Add(exception);
return base.OnErrorAsync(exception);
}

最新更新