2014-06-18 2 views
0

기본 단순 IoC 대신 Spring.net에서 Caliburn.Micro를 사용합니다. 커스텀 Bootstrapper (Caliburn의 BootstrapperBase에서 파생 됨)가 작동 중이고 Spring.net에서 ViewModels를 정의 할 수 있습니다. 그러나 뷰는 여전히 실행 어셈블리의 반영 (이름 규칙)에 의해 해결됩니다. 부트 스트 래퍼의 다음 메소드를 사용하여 ViewModels의 뷰를 해석하기위한 어셈블리를 추가했습니다.SelectedAssemblies() 메서드 대신 IoC 또는 MEF를 사용하여 뷰 해석

protected override IEnumerable<Assembly> SelectAssemblies() 
    { 
     // hmm, want to change the way how the view is resolved... how to do this? 
     // ... use IoC or MEF for this task instead? 
     return new[] 
        { 
         // don't want to add every dll here 
         this.GetType().Assembly, 
         Assembly.Load("MyViewModels.Assembly") 
        }; 
    } 

보기를 해결하고 IoC 또는 MEF를이 작업에 사용하는 동작을 변경하는 방법은 무엇입니까? 문제는 부트 스트 래퍼가 요청한보기를 해결하는 가상 메소드를 가지고 있지 않다는 것입니다. 이 동작을 변경하려면 시작점은 무엇입니까?

protected virtual Control ResolveViewForModel(Type modelType) {...} 

어떤 힌트를 주셔서 감사합니다.

답변

1

우선, 저는 caliburn.micro를 모르므로 이것이 틀릴 수도 있습니다.

LocateTypeForModelType을 보면 View-naming conventions과 대조하여 사용할 수있는 유형을 AssemblySource에게 묻는 것으로 보입니다.

위의 모든 것은 정적 클래스이므로 상속하고 무시할 방법이 없다고 생각합니다. 그것들은 고정되어 있기 때문에 대중적인 관찰 가능한 사전에 어셈블리를 추가 할 수 있습니다. 약간의 해킹이 느껴지고 SelectAssemblies이 적절한 방법으로 보입니다.

그러나, 그것은 나에게 보인다 질문에 우리에게 가져다 어셈블리에 대한 동일한 기능을 수행 할 수 ViewsViewModels 하나를 해결하기위한 규칙이 있기 때문에 : 당신이 ViewModels/Views를 검색하기위한 회합이 결정 어떻게는. 해당 전략은 SelectAssemblies 메소드에 내장 될 수 있습니다.

당신이 caliburn.micro 그 어셈블리의 오른쪽 뷰를 찾는 방법을 변경하려면

는 효과적으로 exisiting 규칙을 there is an explanation in their wiki를 추가/변경.

마지막으로 귀하의 질문에 대답하려면 : "IOC의 또는 MEF를 통해 해결 조회수를 대신 SelectedAssemblies() 메소드를 사용하는"

Caliburn.Micro가 규칙을 사용합니다 패배 Caliburn.Micro의 철학의 이모 이런 종류의 지정된 어셈블리에서 뷰를 해석합니다. 이름/네임 스페이스 기반 컨벤션 대신 IoC 컨테이너를 사용하려고하면이 접근법과 모순됩니다.

관련 문제