没有无参数构造函数的MVC控制器

时间:2013-09-11 16:41:11

标签: asp.net-mvc asp.net-mvc-4

现在我正在学习MVC,但遇到了一个我无法弄清楚的问题。

在我下载的测试项目中,我可以看到一些控制器没有无参数构造函数,而是有一个具有许多参数的构造函数。怎么可能?

我的意思是,当有人访问某个页面时,必须首先创建一个控制器。创建控制器的东西必须使用无参数构造函数创建它。

我想这是我在MVC中遗漏的东西。 :)

2 个答案:

答案 0 :(得分:4)

在没有看到代码的情况下,我首先想到的是涉及一些依赖注入(即Ninject,Autofac等等),它会将构造对象(从定义的规则)注入到构造函数中。如果您不熟悉控制反转和依赖注入模式,这里有一个堆栈溢流问题,它有一个非常明确的解释: What is Inversion of Control?

如果还有其他事情发生,那么也许您可以包含一些代码,以便我们可以查看它。

答案 1 :(得分:4)

这称为构造函数注入,它用作依赖注入工具(如Ninject和StructureMap)的基础。它允许物体松散耦合。

基本上,每当您必须使用new创建对象的实例时,您就会将自己与该对象的具体实现紧密结合。如果不是不可能的话,这可能会使事情变得困难。

void MakeBacon()
{
    var smokey = new Bacon();
}

通过使用构造函数或依赖注入等注入方法,我们松散地耦合自己,因为我们不再需要创建新实例,而是注入它。

void MakeBacon(IBacon smokey){
   // Make bacon here.
}

这是解释构造函数注入的堆栈交换的一个很好的答案

What is constructor injection?

这是关于构造函数注入的Microsoft文章

Annotating Object for Constructor Injection