2012-05-17 1 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(); 

바 다음 푸를 만들고 자체에 주입합니다 .

관련 문제