2013-06-28 4 views
0

와 뷰 모델에 주입한다 EventAggregator :EventAggregator에 Caliburn 마이크로 문서에서 추출 Caliburn 마이크로

// Creating the EventAggregator as a singleton. 
public class Bootstrapper : BootstrapperBase { 
    private readonly SimpleContainer _container = 
     new SimpleContainer(); 

    // ... Other Bootstrapper Config 

    protected override void Configure(){ 
     _container.Singleton<IEventAggregator, EventAggregator>(); 
    } 

    // ... Other Bootstrapper Config 
} 

// Acquiring the EventAggregator in a viewModel. 
public class FooViewModel { 
    private readonly IEventAggregator _eventAggregator; 

    public FooViewModel(IEventAggregator eventAggregator) { 
     _eventAggregator = eventAggregator; 
    } 
} 

그래서 당신은 EA의 인스턴스가 VM에 주입하는 부트 스트 래퍼에 의해 어떻게 생성합니까되는 질문?

var svm = new SomeViewModel(?);

내가 Caliburn.Micro.IoC.Get 방법을 사용하여 시도했지만 문제가 해결되지 않았다

...

답변

6

아니, 당신은하지 var svm = new SomeViewModel(?) 할 서비스 때문에 IoC.Get를 사용하지 않는 위치는 반 패턴이되고있다.
기사 작성자가 제안한 패턴이 가장 좋습니다. 즉, 생성자 삽입을 통해 필요한 개체에 종속성을 주입해야합니다.
다른 방법으로 말하는 방법을 모르겠지만 응용 프로그램을 구성 가능하게 만들고 프리젠 테이션 계층을위한 아키텍처를 만듭니다.
내가 말하고있는 것과 관련된 훌륭한 아이디어가 있고 그 응용 프로그램이 좋은 응용 프로그램과 함께 있기 때문에 나는 Screens, Conductors and Composition 문서를 점검 할 것입니다.
종속성 주입에 대해서도 읽게됩니다.

+1

IEventAggregator eventAggregator를 ViewModel 생성자에 추가하고 더 이상 기본 생성자가 없으면 VM 인스턴스를 생성 할 때 EA의 인스턴스를 전달해야합니다. 예제는 통과 할 수있는 방법입니다. 그것은 VM 생성자로 ... –

+2

@DeanKuga 그건 내 요점은, 당신은 뷰 모델을 수동으로 만들지 않는다. 당신은 CaliburnMicro가 부트 스트 래퍼에서 전체 객체 그래프를 생성하도록하고 만약 당신이 뷰 모델을 가지고 eventAggregator를받은 ViewModel을 가지고 있다면, 읽기 전용 인스턴스 변수를 통해 참조를 유지하고 해당 ViewModel이 생성자에서 IEventAggregator를 취하는 다른 ViewModel을 수동으로 생성해야하는 경우 ViewModel에서이 인스턴스를 사용하십시오. –

1

내가 쓴 글을 썼습니다. 스니퍼가 정확합니다 (그에게 녹색 진드기를 남겨주세요). Caliburn.Micro는 구성이라는 개념에 많은 투자를합니다. 이것이 의미하는 바는 전체 객체 그래프가 런타임에 암시 적으로 만들어 지거나, 작성된 것입니다.

"쉘"ViewModel이 부트 스트 래퍼에 의해 만들어지고, 쉘은 다른 뷰 모델을 차례로 생성합니다. 이를 통해 생성자 삽입을 사용하고 최상의 조합 가능성을 제공합니다.

그러나 이것이 원하는 기능이 아닐 때가 있습니다.이를 위해 IoC 클래스를 통해 서비스 로케이터를 제공합니다. 스니퍼 (Sniffer)가 말했듯이, 서비스 위치에 대한 대부분의 사용 사례는 안티 패턴으로 간주되므로 사용법을 심각하게 면밀히 조사해야합니다. 그렇지 않으면 길 아래에서 엉덩이를 때리게됩니다.

IoC와 우리의 의존성 컨테이너 인 SimpleContainer 모두에 대한 두 개의 새로운 기사를 마무리하려고합니다. 일단 이러한 것들이 올라간다면 EventAggregator 문서에 관련 링크를 추가하여 주입 사이트와 최상의 연습.

+0

링크가 있습니까? Dependency Injection이 필요한 뷰에 UserControls를 추가하는 "적절한"방법에 매우 흥미가 있습니다. Caliburn.Micro를 처음 사용합니다. – faldeland

+0

둘 다 현재 EventAggregator 및 SimpleContainer에 있습니다. http://caliburnmicro.codeplex.com/documentation – McDonnellDean

관련 문제