2017-08-04 57 views
1

結合我的一個接口,一類是否可以使用Ninject約定綁定已存在的接口使用顯式綁定?

錯誤激活IInitialUploadFolderCleaner多個匹配 綁定可當我得到一個NinjectActivationException。匹配綁定:1)從 IInitialUploadFolderCleaner結合InitialUploadFolderCleaner 2)從IInitialUploadFolderCleaner結合 到InitialUploadFolderCleaner 激活路徑:1)請給IInitialUploadFolderCleaner 建議:1)確保你已經定義 IInitialUploadFolderCleaner綁定只有一次。

所以,我使用約定與BindDefaultInterface()方法綁定,但是對於這個類我想添加一個構造函數參數 - 一個字符串。
爲了達到這個目的,我想指定顯式綁定,希望ninject只會在未找到顯式綁定時使用默認綁定。

kernel.Bind<IInitialUploadFolderCleaner>().To<InitialUploadFolderCleaner>().WithConstructorArgument("siteRootPath", HostingEnvironment.ApplicationPhysicalPath); 


     kernel.Bind(x => 
     { 
      x.FromAssembliesMatching("MyPrefix.*") 
       .SelectAllClasses() 
       .BindDefaultInterface(); 
     }); 

但是,事實證明,它不能這樣工作,或者它需要一些額外的設置。
我沒有在任何其他地方明確地綁定這個接口,並且當我重命名實現以使它不遵循命名約定時,它工作正常,我得到所有構造函數參數。

回答

1

您應該能夠在基於約定的綁定中排除特定類型,以便您仍然可以爲它們編寫顯式綁定。

kernel.Bind<IInitialUploadFolderCleaner>().To<InitialUploadFolderCleaner>().WithConstructorArgument("siteRootPath", HostingEnvironment.ApplicationPhysicalPath); 

    kernel.Bind(x => 
    { 
     x.FromAssembliesMatching("MyPrefix.*") 
      .SelectAllClasses() 
      .Excluding<InitialUploadFolderCleaner>() 
      .BindDefaultInterface(); 
    }); 
+0

不包括!真棒,沒有那個,謝謝! – Bartosz