@alexsemen94
начинающий прогаммист

В чем смысл метода CreateScope, какие преимущества он дает?

Например в данном коде
public static void Main(string[] args)
        {
            var host = CreateWebHostBuilder(args);

            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;

                try
                {
                    var context = services.GetRequiredService<CatalogContext>();
                    CatalogSeed.SeedAsync(context).Wait();
                }
                catch (System.Exception ex)
                {

                    var logger = services.GetRequiredService<ILogger<Program>>();
                    logger.LogError(ex, "An error occured while seeding the database");
                }
            }
        }
  • Вопрос задан
  • 4529 просмотров
Пригласить эксперта
Ответы на вопрос 1
@lil_Toady
Есть три типа срока жизни объектов в DI контейнере (по крайней мере от Microsoft, который тут рассматривается):
- Singleton - Объект создается только один раз на срок жизни программы, соответственно все кто его запросил получат одну и ту же сущность;
- Scoped - Объект создается только один раз в пределах скоупа, и эта сущность будет передаваться всем кто ее запрашивал в пределах этого скоупа , а после этого удаляется (и вызывается Dispose, если внедрен интерфейс IDisposable);
- Transient - Объект создается по каждому запросу, то есть DI всегда будет подсовывать новую сущность;

Это механизм изоляции и ограничения срока жизни объекта. Если рассматривать ASP.NET, то каждый запрос к серверу обрабатывается в своем скоупе.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы