2012-01-06 26 views
0

所以我在與依賴注入的幾個問題..我得到以下錯誤:DI錯誤從注入組件調用的組件時

Error activating IDocumentReadRepository No matching bindings are available, and the type is not self-bindable. Activation path: 3) Injection of dependency IDocumentReadRepository into parameter readRepository of constructor of type ReadOrchestrator 2) Injection of dependency IReadOrchestrator into parameter

所以我注入我的readOrchestrator到我MVC3應用這很好..但問題出現在我的readOrchestrator中時,我調用了IDocumentReadRepository中的一個方法。

我ReadOrchestrator樣子:

public class ReadOrchestrator : IReadOrchestrator 
{ 
    private readonly IDocumentReadRepository _readRepository; 

    public ReadOrchestrator(IDocumentReadRepository readRepository) 
    { 
     _readRepository = readRepository; 
    } 

    public UserFeed GetUserFeed(string userName, int pageNumber, int pageSize) 
    { 
     var feed = _readRepository.Query<UserFeed>(x => x.UserName == (string)userName 
      .Page(pageNumber, pageSize)); 
     return feed; 
    } 
} 

    public class DocumentReadRepository : IDocumentReadRepository 
    { 
     readonly IDocumentStore _documentStore; 

     public DocumentReadRepository(IDocumentStore documentStore) 
     { 
      _documentStore = documentStore; 
     } 
... 
} 

我應該在這種情況下使用DI?如果是這樣,我應該如何/在哪裏做IDocumentReadRepository的綁定?或者我應該每次打電話給我的ReadOrchestrator時創建它的新實例?

感謝

+0

如何注入'ReadOrchestrator'?對「DocumentReadRepository」執行相同操作。 – 2012-01-06 11:24:25

回答

1

是肯定的,你需要註冊或綁定IDocumentReadRepository到具體實施,即DocumentReadRepository

你的代碼庫中有一個BindModule。

DocumentReadRepository執行綁定,當想要創建ReadOrchestrator的實例時,ninject會爲您提供依賴關係。

像這樣

this.Bind<IDocumentReadRepository>.To<DocumentReadRepository>(); 
+0

我嘗試綁定我的kernal在MVC級別..但它不工作 – nologo 2012-01-06 13:44:14

+0

從任何'Ninject'代碼清理項目,然後通過NuGet添加'Ninject'和'Ninject.Web.Mvc',它會爲你配置它。 – 2012-01-06 13:59:14

+0

這就是問題所在,我沒有正確引用ninject! – nologo 2012-01-06 14:24:04