我正在学习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())
{}
答案 0 :(得分:4)
当MVC框架实例化控制器时,它使用默认(无参数)构造函数。
默认情况下,您正在注入具体的IHelloService
实现。这将在用户导航到操作时使用。
单元测试将使用重载并传入模拟IHelloService
实现,而不是调用默认构造函数。
答案 1 :(得分:3)
如果您不使用为您注入此内容的依赖项注入框架,那么它将非常有用。通过这种方式,您无需手动注入对象,对象将自行处理。
当然,第二个构造函数在单元测试时注入自定义对象很有用。
通常需要这样做:
IFoo foo = new Foo();
IBar bar = new Bar(foo);
当构造函数创建默认对象时,您可以这样做:
IBar bar = new Bar();
Bar将创建一个Foo并将其注入其自身。