是否可以使用Ninject约定绑定已存在的接口使用显式绑定?

问题描述:

结合我的一个接口,一类是否可以使用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(); 
     }); 

但是,事实证明,它不能这样工作,或者它需要一些额外的设置。
我没有在任何其他地方明确地绑定这个接口,并且当我重命名实现以使它不遵循命名约定时,它工作正常,我得到所有构造函数参数。

您应该能够在基于约定的绑定中排除特定类型,以便您仍然可以为它们编写显式绑定。

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

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

不包括!真棒,没有那个,谢谢! – Bartosz