如何在注入和模块绑定(nInjectModule)时将ninject设置为单独的程序集

时间:2014-07-02 05:51:26

标签: asp.net-mvc-4 ninject ninject.web.mvc ninject-interception ninject.web

以下是项目结构:

  1. MVC 4应用程序       1)项目用于MVC,控制器已注入接口。       2)接口存在于此应用程序中。
  2. 经理库项目。       1)项目包含MVC应用程序的参考。       2)将每个接口实现到此程序集中。       3)NinjectMOdule存在于此项目中,其中带有相关管理器类的绑定接口。
  3. 问题:无法将注入的类放入Web应用程序中。

    它出现以下错误:               Error No matching bindings are available, and the type is not self-bindable. Activation path: 2) Injection of dependency ILeadInformation into parameter leadInformation of constructor of type HomeController 1) Request for HomeController

1 个答案:

答案 0 :(得分:0)

通常在管理内核的“根”项目中,您需要加载所有模块。这必须在应用程序i.E初始化期间完成。在应用程序依赖绑定之前。 假设绑定ILeadInformation的模块称为LeadModule。它看起来像是:

IKernel.Load<LeadModule>();

编辑:

对于您的具体方案,您拥有包含应用程序和一些接口的MVCApplication程序集,并且您拥有引用Manager程序集的MVCApplication程序集,如下所示:

Original dependencies

现在您应该将组合根放在MVCApplication程序集中。但是,呃不,你不能引用Manager程序集,因为这会导致循环依赖。 所以我们必须解决这个问题。我们需要将接口移动到新的程序集中。并调整参考,使它看起来像: splitting up into more assemblies so we don't have circular references