İçeriğe geç

Captured scoped service (ARCH501)

Anahtar dotnet.di.captured-scoped-service · Önem error · Kategori di · İlke DependencyInversion

Singleton servisler, scoped servisleri yapıcı üzerinden enjekte ederek yakalamamalıdır. Bu, scoped servisin bir singleton gibi davranmasına ve scope kaçaklarına yol açar.

public class CacheManager
{
private readonly OrderDbContext _context;
public CacheManager(OrderDbContext context) // scoped, singleton içinde
{
_context = context;
}
}
public class CacheManager
{
private readonly IServiceScopeFactory _scopeFactory;
public CacheManager(IServiceScopeFactory scopeFactory)
{
_scopeFactory = scopeFactory;
}
public void Refresh()
{
using var scope = _scopeFactory.CreateScope();
var context = scope.ServiceProvider.GetRequiredService<OrderDbContext>();
}
}

Scoped servise singleton içinden IServiceScopeFactory ile bir scope oluşturarak erişin. Gerekirse kural proje/workspace bazında except/ignore ile bastırılabilir.