Экземпляр DbContext против экземпляра Scope - PullRequest
0 голосов
/ 08 марта 2019

Почему Entity Framework использует метод AddDbContext для внедрения зависимостей вместо Singleton, Scoped, Transient?

С методом AddDbContext какой срок службы сервиса (Singleton, Scoped, Transient) мы получили длякаждый запрос?

1 Ответ

1 голос
/ 08 марта 2019

Безпараметрическая версия метода приводит к Scoped времени жизни для DbContext и, если дано, к опциям:

        public static IServiceCollection AddDbContext<TContext>(
        [NotNull] this IServiceCollection serviceCollection,
        [CanBeNull] Action<DbContextOptionsBuilder> optionsAction = null,
        ServiceLifetime contextLifetime = ServiceLifetime.Scoped,
        ServiceLifetime optionsLifetime = ServiceLifetime.Scoped)
        where TContext : DbContext
        => AddDbContext<TContext, TContext>(serviceCollection, optionsAction, contextLifetime, optionsLifetime);

AddDbContext - это просто метод расширения, предоставляемый Entity Framework Core, который обрабатывает регистрацию службы для вас под капотом . Вы можете выполнить всю регистрацию службы, которая выполняется там, самостоятельно, но с помощью этого метода расширения EFCore гарантирует, что все настроено так, как нужно.

Метод имеет перегрузку , в которой вы можете сами указать ServiceLifetime (который вызывается с параметрами по умолчанию из-за перегрузки без параметров).

В общем, для подобных вопросов проще всего обратиться к официальной документации:

EntityFrameworkServiceCollectionExtensions.AddDbContext Официальный документ

Или для более глубокого понимания посмотрите код на github:

EF-Core Github

...