2011-09-08 122 views
3

我們正在構建一個利用ASP.NET MVC,Entity Framework Code First和即將發佈的SQL Azure Federations的多租戶數據庫應用程序。我們的存儲庫接受一個DbContext作爲使用Ninject注入的構造函數參數。問題是DbContext有一個int構造函數參數來指定將用於使用該上下文進行請求的帳戶ID。類似這樣的:Ninject - 來自會話的構造函數參數

public class DatabaseContext : DbContext 
{ 
    public DatabaseContext(int accountId) 
    { 
      // Code here to ensure we only work with data associated with 
      // the account identified by accountId 
    } 
} 

帳戶ID的值將存儲在Session變量中。問題是我們如何讓Ninject在創建DatabaseContext的新實例時將Session中的值注入構造函數中?

或者還有另一種方法我應該去注入帳戶ID到DbContext?

回答

6

有幾種方法。我喜歡使用.ToMethod的方法。

Bind<DatabaseContext>().ToMethod(
    c => new DatabaseContext((int)HttpContext.Current.Session["Acct"]); 

雖然解決這方面的問題,我發現它最好創建一個ISessionManager服務,上有基於會話的數據。任何需要的東西,例如accountId都會將此服務注入到構造函數中,並在需要帳戶ID時訪問其AccountId屬性。

+0

這很有道理。謝謝你的幫助。 –

+1

對於ISessionManager爲+1。這就是我要建議的。 –

+2

你也可以注入一個'IDbContextFactory'的實現,它有一個方法:'DbContext GetContext(int accountId);' –

相關問題