2012-05-17 82 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並注入到其自身。

相關問題