Mic*_*hal 6 .net c# .net-core asp.net-core asp.net-core-3.1
我在 ASP.NET Core 3.1 应用程序中面临处置 IServiceProvider 对象的问题:
System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'IServiceProvider'.
Run Code Online (Sandbox Code Playgroud)
我正在类中的方法IServiceProvider内捕获对象并在. 大多数情况下,这工作正常,但偶尔会被抛出。我可以理解in不应该这样使用。所以我想知道:ConfigureServicesStartupBackgroundServiceObjectDisposedExceptionIServiceProviderConfigureServices
Dispose/DisposeAsync召唤IServiceProvider?什么是ServiceProvider生命周期?IServiceProvider在BackgroundService 中引用ASP.NET Core 的正确方法是什么?我应该在那里使用IServiceScopeFactory并创建新的范围吗?使用IServiceScopeFactory单调设计来安全且受控地解析其他服务。它是一个用于创建 实例的工厂,是在某个范围内创建服务的IServiceScope唯一方法。IServiceScope CreateScope()一旦处理完毕,任何已解决的范围服务IServiceScope.ServiceProvider也将被处理。
现实生活中的例子:
[HttpPost]
public IActionResult FooJob([FromServices] IServiceScopeFactory resolver, JobContract job)
{
//long running task
_ = Task.Run(async () =>
{
using var scope = resolver.CreateScope();
var svcProvider = scope.ServiceProvider; //Scopped lifetime
var mediator = svcProvider.GetRequiredService<IMediator>();
var request = RunFooJob.Command.Create(job);
return await mediator.Send(request);
});
return StatusCode(StatusCodes.Status200OK);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5153 次 |
| 最近记录: |