为什么Entity Framework使用AddDbContext
方法进行依赖项注入而不是Singleton,Scoped,Transient?
使用AddDbContext
方法可以为每个请求提供什么样的服务寿命(Singleton,Scoped,Transient)?
答案 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上的代码: