2012-10-24 69 views
0

我正在使用.net c#Mvc,使用ninject存儲庫模式。我的問題是,當我在函數中使用重複使用時,每次我想從數據庫獲取更多信息並需要訪問另一個表時,我需要從調用此函數的所有位置傳遞存儲庫。我做錯了嗎?這就是這種方式,這是更長的發展,然後只是打開一個連接,並在功能的末尾處置。c#mvc DI注入庫

+1

這聽起來像你可能會做錯了。 [這是一個類似的例子](http://blog.devlex.net/post/2011/02/24/Controller-injection-MVC-and-IoC.aspx) – markpsmith

回答

2

如果你的類需要載入大量的存儲庫,有時可能表明你的類正在做太多的事情,並可能違反單一責任原則。 也許如果你把這門課分成更小的專業班,問題就不會那麼糟糕。

另一方面,有時傳遞倉庫的負載是不可避免的。你可能會考慮創建一個工廠類來爲你創建遭受'構造器阻塞'的類 - 由於重構構造器初始化只在一個地方(在工廠類中),這應該可以節省一些輸入。

編輯:一個非常簡單的「工廠」類可能是如下:

public class FactoryClass 
    {   
     public ClassWithLotsOfRepositories GetClassWithLotsOfRepositories() 
     { 
      return new ClassWithLotsOfRepositories(new repository1(), 
          new repository2(), new repository3()); 
     } 
    } 

所以,你現在可以無需在構造函數中每次都指定庫創建ClassWithLotsOfRepositories的一個實例。

ClassWithLotsOfRepositories myClassThatUsesLotsOfRepositories = new FactoryClass().GetClassWithLotsOfRepositories(); 

我的例子已經通過構造函數傳遞的具體類。你正在使用Ninject,因此可能有需要解析的接口 - 我只是簡單地說明這個例子來說明這個概念。

+0

尼爾湯普森你可以請舉一個例子創建其他類的工廠類? –