2012-05-17 50 views
2

我正在学习asp.net mvc3。我在网上找到的一个例子是向我展示如何使用IOC。asp.net mvc3,为什么我需要为我的控制器类构造函数

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

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

本例中有两个构造函数。我明白第二个。第一个我明白这是为了什么,但对我来说,它看起来像额外的代码,你永远不会需要它。

有人可以请向我解释什么点来添加第一个构造函数。

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

回答

4

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

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

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

3

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

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

通常你需要做的是:

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

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

IBar bar = new Bar(); 

酒吧,然后将创建一个Foo并注入到其自身。

相关问题