我一直在使用Ninject 2開始(從GitHub下載昨天包括MVC擴展項目),並基於以下技術項目:如何讓Ninject 2使用LINQ to SQL DataContext的無參數構造函數?
- 的.Net 3.5 SP1
- ASP.NET MVC 1.0
- LINQ到SQL
沒有什麼神奇這裏 - 我正在使用LINQ實現的在運行時代碼以SQL(和使用單元測試代碼了哈希表)的幾個庫接口(命名爲喜歡IEntityRepository)。這些存儲庫中的每一個都需要從LINQ到SQL的DataContext實例,以便與數據庫進行交互,因此這是具體存儲庫類的構造函數參數。結合設置是這樣的:
Kernel.Bind<MyDataContext>().ToSelf().InRequestScope();
這樣做的原因是,我希望能夠分享不同的存儲庫之間的實體,如果我碰巧需要更多的人,並與LINQ到SQL的DataContext單元的工作理念,我覺得對每個HttpRequest創建一個有意義。
我通常使用MyDataContext的無參數構造函數 - 我不認爲這是一個風險因爲它用於測試系統上的內部項目,所以datacontext中的「內置」連接字符串是無害的。然而,由於Ninject 2是「貪婪」,並希望與大多數參數的構造函數,我真的不能粘[Inject]
參數爲生成的代碼以任何有意義的方式,我得到每當Ninject嘗試創建我的控制器之一(一個錯誤它需要一個存儲庫,它需要datacontext)。
我已經看過提及IConstructorScorer
以及能夠製作一個「倒置」的東西,它總是使用帶有LEAST參數的構造函數,但是這又改變了注入如何工作 - 默認行爲可能是我想要的只是datacontext。
所以 - 有沒有指定這個綁定(且僅此綁定)應使用一個特定構造一個不錯的,乾淨的方式?我們可以像Ninject 1那樣對提供商做同樣的事情,也許可以提供我們自己的「工廠」?或者我應該放棄並嘗試將參數提供給有意義的數據上下文?
是完整的,我想補充的'InRequestScope()',以保證DataContext的生命週期是正確的。 – 2010-05-04 03:07:57