在转移到ASP.Net Core之前,我使用了Bind<DbContext>().To<MyActualDbContext>();
,它允许我以通用方式注入我的实体框架数据库上下文。例如:
AddDbContext
在ASP.Net Core MVC中,当使用AddDbContext<MyActualDbContext>(x=> x.UseSqlServer("..."));
---
public class TestController: Controller {
public DbContext Db {get; private set;}
public TestController(DbContext Db){
this.Db = Db;
}
}
时,如果我执行以下操作,则会导致服务无法解析。
AddSingleton
我知道我可以使用AddScoped
或AddDbContext
来解决此问题,但是,由于AddDbContext
是专门用于处理EF数据上下文的,因此{&1} ; d想知道是否有任何方法可以使用该方法实现这一目标。
如果AddSingletone
不支持此行为,哪种替代方法更好AddScoped
或AddScoped
?我知道{{1}}每个请求实例化一次服务,但我想知道Singleton是否会导致任何潜在的问题。我想确保在ED DbContext的情况下使用这两种方法不会有任何可能的缺点。
答案 0 :(得分:2)
您可以使用
{{1}}
但老实说,我没有看到这样做有什么好处,因为基类不会有任何DbSets所以你不能使用它而不将其转换为原始代码,但这种方式有点节拍完全拥有IoC的想法。
是的,单身DbContext是有问题的。它可能导致内存泄漏(跟踪缓存将继续增长),如果将其部署在某处,DI系统将始终返回单例上下文的已处理实例。