1

내가 .NET에서 M. 시만 책 의존성 삽입 (Dependency Injection)을 읽고 있어요, 2 장 소스 코드 : ComplexCommerce 솔루션에서 http://www.manning.com/seemann/및 다른 서비스

, CommerceWebPresentationModel, HomeController 우리가 리포지토리가 생성자로 전달되었습니다.

public HomeController(ProductRepository repository, CurrencyProvider currencyProvider) 

새로 생성 된 서비스에 전달됩니다.

public ViewResult Index() 
    { 
     var currencyCode = this.CurrencyProfileService.GetCurrencyCode(); 
     var currency = this.currencyProvider.GetCurrency(currencyCode); 

     var productService = 
      new ProductService(this.repository); 

그러나 BasketController에는 BasketRepository가 삽입 된 생성자로 전달되는 서비스가 있습니다.

public BasketController(IBasketService basketService, 
     CurrencyProvider currencyProvider) 

ProductService가 인터페이스를 구현하지 않고 HomeController를 테스트 할 수 없다는 것을 알 수 있습니다.

제 질문은 : 왜 DI 덕분에 ProductService가 인스턴스화됩니까? 내가 놓친 게 있니? 아니면 저자가 놓친 것입니까? 그렇지 않으면 정말 좋은 책 에서요?

+0

계속 읽기; 나는 네가 결국 거기에 갈 것이라고 생각해. – Steven

+0

모든 종속성이 생성자를 통해 주입되거나 모든 주입이 필요하지는 않습니다. 22 페이지를 참조하십시오. –

+0

@DavidOsborne 동의하지만이 예에서는 아닙니다. 응답 해 주셔서 감사합니다. –

답변

3

바라건대, this discussion thread가 문제에 관해 더 많은 것을 밝힙니다.

간단히 말해서, 그것은 예제로 제공되었지만 책의 주요 부분 중 하나는 아닙니다. 나는 실제 생산 코드베이스에서 의도적으로 그런 코드를 작성하지 않을 것입니다.

그러나 테스트 구동 식 개발을 사용하여 책의 전체 코드 기반을 작성했기 때문에 HomeController은 테스트 할 수 없다고 동의합니다. 책의 코드를 다운로드하여 테스트에서 다루고 있는지 확인할 수 있습니다. 그러나, 나는 HomeController이 단위 테스트를하기가 어렵다는 것에 동의합니다.

다른 사람들과 마찬가지로 코딩하는 동안 실수로 코드를 작성합니다 ...

+2

많은 설명을 해주신 링크 주셔서 감사합니다. 내가 더 잘 알면, 나는 너의 책을 읽지 않을 것이다! 마지막 두 프로젝트는 "Doing it wrong"예제의 정확한 사본이었습니다. 나는 단지 내가 뭔가를 놓치지 않고 있는지 확인하고 싶었다. 나는 테스트에 대해 당신과 동의하지만, 나는 단지 의존성이 HomeController 테스트가 취성이된다는 것을 지적하고 싶었다. 응답 해 주셔서 감사합니다. –