2

我正在学习asp.net mvc3。我在网上找到的一个例子是向我展示如何使用 IOC。

            public class HomeController : Controller
            {
                private IHelloService _service;
                public HomeController():this(new HelloService())
                {}

                public HomeController(IHelloService service)
                {
                    _service = service;
                }
            }

此示例中有两个构造函数。我理解第二个。第一个我明白这是为了什么,但对我来说,这似乎是额外的代码,你永远不需要它。

有人可以向我解释添加第一个构造函数的意义。

                public HomeController():this(new HelloService())
                {}
4

2 回答 2

4

当 MVC 框架实例化一个控制器时,它使用默认(无参数)构造函数。

默认情况下,您正在注入一个具体的IHelloService实现。这将在用户导航到操作时使用。

单元测试将使用重载并传入模拟IHelloService实现,而不是调用默认构造函数。

于 2012-05-17T18:55:22.670 回答
3

如果您不使用为您注入它的依赖注入框架,它会很有用。通过这种方式,您不必手动注入对象,对象将自行处理。

当然,第二个构造函数对于在单元测试时注入自定义对象很有用。

通常需要这样做:

IFoo foo = new Foo();
IBar bar = new Bar(foo);

当您的构造函数创建一个默认对象时,您可以这样做:

IBar bar = new Bar();

然后 Bar 将创建一个 Foo 并将其注入自身。

于 2012-05-17T18:54:47.653 回答