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.
Hatalı
Bölüm başlığı “Hatalı”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>(); }}Düzeltme
Bölüm başlığı “Düzeltme”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.