Разница между AddTransient, AddScoped и AddSingleton в ASP.NET Core
Рубрика: Логично, но не очевидно. Артефакты Cod Review;
Нельзя через конструктор с помощью DI внедрять службу, время жизни которой объявлено меньше, чем та, которая эту службу использует.
Т.е. нельзя в службе объявленной как AddSingleton , внедрять через конструктор службу объявленную как AddTransient или AddScoped. А в службу AddScoped, внедрять AddTransient.
В таких случаях следует использовать сервис через внедрение в конструктор IServiceScopeFactory, и использовать конструкцию:
public class MyScopedClass { private readonly IServiceScopeFactory _scopeFactory; public MyScopedClass(IServiceScopeFactory scopeFactory) { _scopeFactory = scopeFactory; } public void UseTransiendService() { using (var scope = _scopeFactory.CreateScope()) { var myTransientService = scope.ServiceProvider.GetRequiredService<IMyTransientService>(); //use myTransientService } } }
Полезные ссылки: Время существования служб
5 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів