Asp.net mvc 如果两个项目进入表示层,如何使用nInject进行DI
其中一个应用程序具有以下设计: 表示层: 1) MVC4(包含对WCF服务的引用)并将ninject DI用于控制器构造函数注入-其中接口和实现都在同一个项目上-MVC 巴尔和达尔 2) WCF服务 转换为以下设计: 1) MVC(没有服务引用,删除了ninject,只包含注入控制器的接口) 2) 新的库项目(包含MVC项目的参考和MVC应用程序中存在的接口的实现),并为DI添加了ninject模块 3) WCF服务 问题: 当我执行第一种设计方法时,它运行良好,我发现,控制器注入接口实例,但是,当我为WCF服务引用进行松散耦合,并添加到新的单独项目中,并将每个接口移动到该单独项目中时,在执行MVC应用程序时,它给我以下错误:Asp.net mvc 如果两个项目进入表示层,如何使用nInject进行DI,asp.net-mvc,asp.net-mvc-4,dependency-injection,ninject,ninject.web.mvc,Asp.net Mvc,Asp.net Mvc 4,Dependency Injection,Ninject,Ninject.web.mvc,其中一个应用程序具有以下设计: 表示层: 1) MVC4(包含对WCF服务的引用)并将ninject DI用于控制器构造函数注入-其中接口和实现都在同一个项目上-MVC 巴尔和达尔 2) WCF服务 转换为以下设计: 1) MVC(没有服务引用,删除了ninject,只包含注入控制器的接口) 2) 新的库项目(包含MVC项目的参考和MVC应用程序中存在的接口的实现),并为DI添加了ninject模块 3) WCF服务 问题: 当我执行第一种设计方法时,它运行良好,我发现,控制器注入接口实例,但是
System.MissingMethodException:没有为此对象定义无参数构造函数。
这看起来像是由ninject DI引起的问题
注意:在MVC项目中,没有NinjectWebCommon
和ServiceModule
都被移动到新添加的类库项目中。注入控制器的接口存在于MVC项目中,其实现存在于新添加的类库项目中
请告诉我这里出了什么问题
感谢您关于“注入控制器的接口存在于MVC项目中,其实现存在于新添加的类库项目中。”-如果您将实现移动到web项目中,错误是否会消失?是的。但我想把它分开。我希望-“接口驻留在MVC项目中,实现在separte库项目中”这背后的原因是,管理器类调用WCF服务,我希望WCF引用与Web松散耦合。所以因此,我一直这样做,在
管理器库项目中添加了web项目的参考,并尝试将DI实现到web中,但它不起作用。毫无疑问,您希望将接口和实现解耦的方法。我只是想知道它是否有效。既然你说它正在工作,下一步我会尝试在Ninject试图解决和看到的每个ctro中设置一个断点,它会抱怨什么,因为没有无参数构造函数。您可能希望检查堆栈跟踪,甚至检查抛出的内部异常(如果有)。通常,它应该可以工作,除非您试图解析一个具有“依赖”对象的对象,该对象没有无参数构造函数。在web应用程序中,只有驻留的接口和nInject库的引用(由nuget添加)。没有Web文件和模块文件。这一切都与管理器库项目有关。我认为,MVC项目示例中应该有一些配置-global.asax应该有一些配置,但我不知道。请告诉我应该是什么……目前的错误表明,正在查找无参数构造函数,因为无法在runttime找到绑定,因为模块安装到另一个manager库项目中,而不是MVC中。请引导我。谢谢。听起来你可能把它倒过来了。您的MVC项目是您的组合根,因此应该了解Ninject,以便它能够解决依赖关系。这意味着您要么将所有代码放在库中,要么将接口放在库中,要么将实现放在MVC应用程序中,否则您将有循环引用。