Naz*_*nyk 7 c# database asp.net-core
我正在开发 ASP.NET Core 3.1 应用程序。我想在我的应用程序即将停止时执行一些与数据库相关的最终操作。为此,我试图在我的范围服务中调用一个函数,该函数是数据库和 ASP.NET Core 之间的附加层。
启动文件
public void Configure(IApplicationBuilder app, IHostApplicationLifetime lifetime)
{
lifetime.ApplicationStopping.Register(() =>
{
app.ApplicationServices.GetService<MyService>().SynchronizeChanges();
});
}
Run Code Online (Sandbox Code Playgroud)
但不幸的Cannot resolve scoped service 'MyApplication.Services.MyService' from root provider是,我在尝试时出错。
应用程序关闭时没有作用域,因此 Asp.Net core 无法创建作用域服务。仅在 http 请求期间创建范围。如果您确实需要创建没有范围的范围服务,您可以手动创建范围:
public void Configure(IApplicationBuilder app, IHostApplicationLifetime lifetime)
{
lifetime.ApplicationStopping.Register(() =>
{
using (var scope = app.ApplicationServices.CreateScope())
{
scope.ServiceProvider
.GetRequiredService<MyService>().SynchronizeChanges();
}
});
}
Run Code Online (Sandbox Code Playgroud)
您也可以将您的服务注册为单例或尝试禁用 Asp.Net Core 范围验证(不推荐)。
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |