2013-02-16 3 views
0
컨테이너에 (대부분 싱글 인터페이스로) 내 저장 서비스 객체를 해결하려고 노력하는

해결 프리즘 서비스 MVVM

ViewModels이 서비스 모듈의 서비스를 사용의 도메인 모듈 있습니다 .

위치와 방법은 도메인 모듈 또는 ViewModels 도메인 모듈의 내 안에 해결이에 대한 권장합니까?

내가 뷰 모델의 생성자 내에서이 작업을 수행 할 수 있다면 서비스가 등록 된 후, 충분히 아래 코드는 내가이 일을하지 않으면 어떻게,인가 :

가 얻는 가장 좋은 방법 무엇입니까
public DetailsViewModel(IWService wSvc,) 
    { 
     wService = wSvc; 
    } 

"View Models"에서 서비스 객체 (Container에 저장 됨)?

여기서 제공 한 것은 샘플입니다. 도움을 주셔서 감사합니다

+0

뷰 모델 (DetailsViewModel)이 유니티 컨테이너로 해결되는 한 위의 코드는 뷰 모델에서 서비스를 제공해야합니다. 당신이 가진 것은 프리즘 어플리케이션을 만든 표준 방식입니다. 뷰 모델이 컨테이너에 의해 생성되지 않는 경우 서비스를 뷰 모델의 생성자에 직접 전달해야합니다. 방금 Prism을 사용하여 응용 프로그램을 작성한 적이 있습니다. 발표자 또는 컨트롤러 클래스없이 VM (View Model)의 전체 개념이 매우 혼란 스럽다는 것을 알았 기 때문에 MVP와 유사한 방식으로 MVVM을 크게 버렸습니다. – Jay

+0

@Jay 정보 주셔서 감사합니다, 그 당시 PC에 없었어요, 나는 여전히 그것을 다루고 일부 어두운 부분을 이해하고 사용하려고, 어떻게 든 그것을 좋아하고 내 코드는 일부 조각이 부족합니다 나는 그들을 고치려고 노력하고있어. :) – LastBye

답변

2

ViewModels이 생성자의 종속성 삽입을 통해 사용하는 서비스를 얻는 것이 좋습니다. 어떤 접근 방식을 선택하든 주 개념 중 하나는 ViewModel을 테스트 할 수 있다는 것입니다. 통상, 이것에는, ViewModel에 서비스의 모의 구현을 제공해, 그러한 서비스와는 관계없이 동작을 테스트 할 수가 있습니다. 생성자 삽입을 사용하는 경우, 모의 서비스를 간단히 생성 한 다음 단위 테스트를 작성했는지 테스트하기 위해 ViewModel의 생성자로 전달할 수 있습니다. 이 시간에 단위 테스트를 작성할 계획이 없더라도 특정 설계도를 따르는 습관을 갖는 것이 타당한 이유라고 생각합니다.

public class SomeViewModel 
{ 
    private IEventAggregator events; 
    private ISomeService someService; 

    public SomeViewModel(IEventAggregator events, ISomeService someService) 
    { 
     this.events = events; 
     this.someService = someService; 
    } 
} 
+0

나는 당신이 제공 한 것과 같은 요령으로 들어갔다. 그러나 간단히 물어 보았다 : 서비스를 얻는 대신 IUnityContainer를 생성자를 통해 얻고 그 직후에 서비스를 정의한 FetchServices의 나중에 정의 된 메소드를 호출했다. 거기, 괜찮 니? 또는 그러한 상황에서 컨테이너를 싱글 톤 (singleton)으로 만들 것을 권장합니까? – LastBye

+1

@LastBye 아니, 방금 설명한 내용은 좋은 생각이 아닙니다. 기본적으로 의존성 주입의 목적을 다소 부정하는 싱글 톤 또는 서비스 위치 스타일 패턴을 만들고 있습니다. "Composition Root"를 찾길 원할 수도 있습니다. 완전히 동의하지 않는 이유는 방금 언급 한 내용을 원하지 않는 이유입니다. – Alan

+1

@LastBye 간단히 말해, 컨테이너 사용을 각 모듈의 entry- 포인트. IUnityContainer를 IModule (구현) 생성자에 삽입합니다. 그런 다음 적어도 Unity에 대해 유형을 등록하고 Initialize 메소드에서 해당 구성 요소를 해결하십시오. 보통 당신이 해결하거나 다른 유형으로 주입되는 다른 유형은 생성자에 종속성을 주입 할 수 있어야합니다. – Alan

관련 문제