在轉向ASP.Net核心之前,我使用Ninject
,它允許我以通用方式注入實體框架數據庫上下文。例如:ASP.Net核心MVC:按基類型的依賴注入
Bind<DbContext>().To<MyActualDbContext>();
在ASP.Net MVC的核心使用AddDbContext
的時候,如果我這樣做,它會導致該服務正在得到解決。
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
已經專門開發用於處理EF數據方面,我想知道是否有任何方式使用該方法實現此目的。
如果AddDbContext
不支持此行爲,哪種替代方法更好AddSingletone
或AddScoped
?我知道AddScoped
每個請求實例化服務一次,但我想知道是否Singleton會導致任何潛在的問題或不。我想確保在ED DbContext的情況下使用這兩種方法不會有任何可能的缺點。
DbContext具有像「Set <>,Add <>,Entity <>等」的方法。允許你以通用的方式使用你的數據庫。假設你對同一個數據庫有不同的上下文。 – Arrrr
'AddTransient'不是一個好主意(由於EF的跟蹤機制)。 – Arrrr
在這種情況下,它並不重要,因爲對象的生命週期是通過「AddDbContext」控制的。當你將其註冊爲作用域時,即使調用了'services.AddScoped(provider => provider.GetRequiredService ()),'provider => provider.GetRequiredService ()'也將始終返回作用域實例。 ' –
Tseng