我有一個Ninject設置,創建一個JobContext解析器InRequestScope()
這工作得很好,但是,我有一個非常具體的電話在網站,需要我循環一些數據庫(每年數據庫中的所有數據)。我無法弄清楚發生了什麼事,因爲我忘記了JobContext是InRequestScope
,但最後一塊代碼是而不是,這是我認爲應該如何行事。InRequestScope和InTransientScope爲Ninject解析到相同的類型
這裏是設置
//Ninject module
Bind<Data.IJobContext>().To<Data.JobContext>().InRequestScope();
//Controller's Initialize
protected override void Initialize(System.Web.Routing.RequestContext requestContext) {
base.Initialize(requestContext);
//set a connection string for the jobContext
this.jobContext = DependencyResolver.Current.GetService<IJobContext>();
jobContext.SetYear(currentYear);
}
由於JobContext是它讓重複使用,每年爲同一對象請求範圍。這是我需要它的唯一例子是InTransientScope
而不是InRequestScope
。
//Special function
foreach (int year in ActiveYears) {
jobContext = DependencyResolver.Current.GetService<IJobContext>();
jobContext.SetYear(year);
DoSomething();
}
我該如何做到這一點?
那麼,在幾乎每一個頁面上,它只需要特定的一年。除了在一次調用中,我需要列出每個數據庫中的所有記錄。我不知道有'Named'。雖然我不喜歡它,但它確實有效。我試圖找出另一種做法,但我很茫然。 :) – Buildstarted 2010-11-15 18:28:59
我使用依賴注入,除了這一個位置,順便說一句:) – Buildstarted 2010-11-18 21:47:13
如果使用InRequestScope併發生Db驗證錯誤,您將無法使用請求範圍上下文將其保存到數據庫。在這種情況下,您需要一個臨時作用域來將特定的異常保存到數據庫中。這篇文章給出了很好的信息:http://stackoverflow.com/questions/26775080/how-to-handle-async-calls-with-ninject-inrequestscope – jsgoupil 2015-03-05 22:50:25