如何在单例服务中使用有作用域的服务



我有一个服务名称,例如"Service1.cs"我已将其注册为单例,我有另一个"服务"。注册为Scoped。我想注入"服务"。到"Service1"但是我们不能知道它给出了错误,有没有办法将作用域服务消费为单例服务

正如你所知道的,当在单例服务中使用作用域服务时,作用域服务的实例在应用程序中表现得像单例一样活跃,并导致内存泄漏。我认为一个好的方法是使用IServiceScopeFactory并获得您的作用域服务,然后使用它并像这样处理它:

public class SingletonService
{
private readonly IServiceScopeFactory _scopeFactory;
public SingletonService(IServiceScopeFactory scopeFactory)
{
_scopeFactory = scopeFactory;
}
public Task SampleMethod()
{
using var scope = _scopeFactory.CreateScope();
var scopedService = scope.ServiceProvider.GetRequiredService<IScopedService>();
//use scope service
//finally service will disposed because of using statement
}
}

最新更新