0

我有一個非常有層次感MVC3應用程序(域,服務,網絡,基礎設施獨立的項目等)Ninject DI - 放置在一個MVC3應用

我明白控制器構造函數注入的概念,結合其MVC3和Ninject一起工作得很好。但是,如何將注入層分離爲網層?

例如,我有一個依賴Repository接口的服務。該服務從控制器調用,服務本身將由構造器注入正確注入,但存儲庫又如何?我如何注入?

public class MyService 
{ 
    protected virtual IPersonRepository PersonRepository {get; set;} 

    public virtual void UseRepository() 
    { 
    PersonRepository.FindEveryoneInTheWorldButDontReturnThem(); 
    } 
} 

哪裏/如何在上面的示例中注入存儲庫?

Ninject 3.0 Ninject.Web.MVC 3.0

回答

3

通過構造函數注入注入資源庫,而當你注入爲MyService作爲依賴你的IoC容器(Ninject)會照顧的依賴鏈(即,任其依賴關係也將由容器解決,並且它們的依賴關係等)

public MyService(IPersonRepository personRepository) 
{ 
    this.PersonRepository = personRepository; 
} 
+0

是不是還有一個[Inject]屬性可以使用? – contactmatt

+0

我問的原因是因爲我的存儲庫中有一個依賴關係,必須解決。但是,要求所有存儲庫使用構造器注入來進行依賴關係似乎有點不必要。 – contactmatt

+0

閱讀https://github.com/ninject/ninject/wiki/Injection-Patterns。 「如果沒有構造函數具有[Inject]屬性,Ninject會選擇Ninject瞭解如何解析的參數最多的參數,如果沒有定義構造函數,Ninject會選擇默認的無參數構造函數(假設有一個)。 – devdigital