2011-03-23 7 views
3

모듈 내에 지역 어댑터를 등록 할 수 있습니까?WPF, 프리즘, MEF. 모듈 내에 지역 어댑터를 등록 하시겠습니까?

내 Shell.xaml에 ContentControl이 있고 "AvalonDock"컨트롤이 포함 된 모듈로 채워지는 "MainRegion"영역으로 설정되어 있습니다. 현재 셸 응용 프로그램에 AvalonDock 영역 어댑터가 있지만 모듈에 배치하고 자체 등록하려고합니다. 이 프로그램을 유연하게 유지하여 AvalonDock 이외의 것을 사용하기로 결정한 경우 셸 어셈블리를 수정하지 않고도 (avalondock 영역 어댑터 제거) 다른 모듈을 쉽게 사용할 수 있습니다.

이런 상상이 가능합니다. 누구든지 전에 이것을 했습니까? 지금 부트 스트 래퍼에서

은 다음과 같습니다

protected override RegionAdapterMappings ConfigureRegionAdapterMappings() 
{ 
    RegionAdapterMappings mappings = base.ConfigureRegionAdapterMappings(); 
    var regionBehaviorFactory = Container.GetExportedValue<IRegionBehaviorFactory>(); 
    var regionManager = Container.GetExportedValue<IRegionManager>(); 
    mappings.RegisterMapping(typeof(Pane), new AvalonRegionAdapter(regionBehaviorFactory, regionManager)); 

    return mappings; 
} 

이 내가 모듈 대신 쉘 부트 스트 래퍼에서 수행하고자하는 것입니다.

답변

4

대답은 당신이 설명하는 시나리오가 가능 입니다 CodePlex의 http://compositewpf.codeplex.com/discussions/250892

에서 여기에있다. 지정 영역 어댑터가 스트 래퍼의 ConfigureRegionAdapterMappings 방법에서 RegionAdapterMappings 에 등록하도록하고 있지만, 는 모듈 내에서 지정 영역 어댑터를 등록 할 수있다.

당신은, 예를 들어, 생성자 주입을 사용하여 모듈 클래스에서 RegionAdapterMappings 에 참조를 취득하고, 거기에 RegisterMapping 메소드를 호출 할 수있다. MefRegionAdapterMappings라는 클래스가 있기 때문에 이 가능합니다. 은 공유 내보내기로 RegionAdapterMappings를 내 보냅니다. 이 때문에 발생할 수있는 타이밍 문제를 알고 수 있음을 유의하십시오. 해당 어댑터를 사용하는 영역을 만들기 전에 사용자 지정 매핑 을 등록 할 때주의해야합니다.