1

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

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

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

我想这是我在 MVC 中错过的东西。:)

4

2 回答 2

4

在没有看到代码的情况下,我的第一个想法是涉及到一些依赖注入(即 Ninject、Autofac 等),这会将构造的对象(根据定义的规则)注入到构造函数中。如果您不熟悉控制反转和依赖注入模式,这里有一个堆栈溢出问题,它有一个非常清楚的解释: 什么是控制反转?

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

于 2013-09-11T16:48:42.160 回答
4

这被称为构造函数注入,它被用作 Ninject 和 StructureMap 等依赖注入工具的基础。它允许对象的松散耦合。

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

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

通过使用诸如构造函数或依赖注入之类的注入方法,我们将自己松散耦合,因为我们不再需要创建新实例,而是将其注入。

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

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

什么是构造函数注入?

这是一篇关于构造函数注入的微软文章

为构造函数注入注解对象

于 2013-09-11T16:55:17.033 回答