DbContext实例与Scope实例

时间:2019-03-08 10:01:55

标签: c# asp.net-core dependency-injection

为什么Entity Framework使用AddDbContext方法进行依赖项注入而不是Singleton,Scoped,Transient?

使用AddDbContext方法可以为每个请求提供什么样的服务寿命(Singleton,Scoped,Transient)?

1 个答案:

答案 0 :(得分:1)

该方法的无参数版本导致DbContext Scoped 生存期,如果提供的话,这些选项还可以:

        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 Official Doc

或者要更深入地了解,请查看github上的代码:

EF-Core Github