我剛開始學習依賴注入,並將其卡在這裏。Ninject基於頂級項目獲得不同實現的最佳實踐
我的項目在實體框架DbContext上有一個WCF DataService。
public class MyDataService : DataService<MyDbContext>
{
protected override MyDbContext CreateDataSource()
{
// I want to use dependency injection for this
return new MyDbContext();
}
}
類或者是
一)IIS託管,所以我沒有集成測試任何控制 b)所示,var host = new DataServiceHost(type, new Uri[] { });
都使用不同的contstructors爲MyDbContext
創建所以基本上注入本
protected override MyDbContext CreateDataSource()
{
INinjectModule module = ???; // -
IKernel kernel = new StandardKernel(module);
return kernel.Get<MyDbContext>();
}
所以疑問句語境重刑是,在這種情況下最好的做法是什麼? 我應該:
a)在類庫創建模塊,這兩個主要項目和服務的使用 二)創建包含Ninject模塊DataService在項目內的公共靜態變量。 c)在保存Ninject內核的DataService項目中創建一個公共靜態變量。d)其他。
我寧願像
protected override MyDbContext CreateDataSource()
{
DefaultKernel.Get<MyDbContext>();
}
謝謝,有一件事情我沒有得到:應該把'Composition Root'放在主項目裏還是放在類庫裏面,其他項目都參考? –
通常他們是「自上而下」。對於Web應用程序,請將其放入Web應用程序Global.asax.cs中。對於WinForms,Program.cs。 –
我已經更新了我的答案,以幫助更好地理解內核只需在您的組合根目錄中。 –