Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如果两个项目进入表示层,如何使用nInject进行DI_Asp.net Mvc_Asp.net Mvc 4_Dependency Injection_Ninject_Ninject.web.mvc - Fatal编程技术网

Asp.net mvc 如果两个项目进入表示层,如何使用nInject进行DI

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服务 问题: 当我执行第一种设计方法时,它运行良好,我发现,控制器注入接口实例,但是

其中一个应用程序具有以下设计:

表示层: 1) MVC4(包含对WCF服务的引用)并将ninject DI用于控制器构造函数注入-其中接口和实现都在同一个项目上-MVC

巴尔和达尔 2) WCF服务

转换为以下设计:

1) MVC(没有服务引用,删除了ninject,只包含注入控制器的接口) 2) 新的库项目(包含MVC项目的参考和MVC应用程序中存在的接口的实现),并为DI添加了ninject模块

3) WCF服务

问题: 当我执行第一种设计方法时,它运行良好,我发现,控制器注入接口实例,但是,当我为WCF服务引用进行松散耦合,并添加到新的单独项目中,并将每个接口移动到该单独项目中时,在执行MVC应用程序时,它给我以下错误:

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应用程序中,否则您将有循环引用。