2013-08-27 5 views
1

저는 Create composite modular UI application in WPF using MEF and PRISM 문서의 지침에 따라 작고 단순한 (당분간) 모듈 식 응용 프로그램을 만들고 있습니다. 지금까지 두 개의 지역, Bootstrapper 클래스 및 두 개의 모듈 프로젝트 인 ModuleA와 ModuleC (자체 만 내보내는)가있는 메인 창이 있습니다. 또한 그들은 각각의 장소 AA보기 메인 윈도우의 지역 중 하나 (A UserControl)는, 예를 들면 :MEF 기반 모듈 식 응용 프로그램에서 모듈 기능을 어떻게 노출합니까?

[ModuleExport(typeof(ModuleC))] 
public class ModuleC: IModule 
{ 
    public void Initialize() 
    { 
     IRegionManager regionManager = (IRegionManager)ServiceLocator.Current.GetInstance(typeof(IRegionManager)); 
     regionManager.Regions["Region2"].Add(new MoneyUserControl()); 
    } 
} 

내 비전은 현재의 높은에서 사용 가져옵니다 MainWindow에 하나 개의 큰 UI 영역을 가지고있다 레벨 앱 기능이 사용되고 있으며이 기능은 가져온 모듈입니다. 이 모듈은 공통점이 많으며 현재 모 놀리 식 응용 프로그램의 일부분이지만 응용 프로그램의 각 기능을 모듈로 가져 오는 동안 기본적으로 기본 서비스를 제공하는 프레임 (MainWindow)을 위해 노력했습니다.

활성 모듈이 메뉴 항목 (명령)을 기본 창에 제공하려고합니다. 이 작업을 '수동'으로 수행하는 것은 매우 쉽습니다. IModuleWithMenu 인터페이스를 사용하고 메뉴를 통합하거나 기본 창에서 'IMenuHost` 인터페이스를 사용하고 메뉴 모듈에 메뉴 명령을 넣도록 기본 창 쿼리를 가지고 있습니다.

그러나 필자는 반드시 있어야한다고 생각합니다. 이미 MEF를 사용하고 있기 때문에 더 나은 방법을 찾고로드 된 모듈에 대한 내보내기 및 가져 오기 카탈로그를 보유하고 있어야합니다. 분명히 나는 ​​수출을 질의하고 그것들을 명령어로 걸러 내고 메뉴 나 다른 형태의 명령어 호출에 연결할 수있다. 그러나 MEF는 이미 만든 것과 같은 것을 공급하지 않는다. 최소, 따라서 버그의 위험이 있습니다.

덧붙여 말하지만 추가 질문 : 누구든지 MEF (주로 WPF에서,하지만 다른 사람들은 WPF 용으로 adap 할 수 있음)를 사용하여 복합 애플 리케이션을 구축 할 때 정말 유용한 자습서 문제의 사본 또는 링크가 있어야합니다. 내가 다룬 기사는 모듈, 카탈로그 및 MEF 자체에 대한 작은 소개입니다. 나는 정말로, 정말로 기술적이며 깊이있는 것을 원합니다. 책 구입은 순서대로 이루어질 수도 있습니다.

답변

2

MEF WPF 프리즘 응용 프로그램을 만드는 데 필요한 자습서에 대해서는 잘 모르고 있지만 현재 많은 응용 프로그램을 개발 중이므로 사용하는 몇 가지 트릭을 제공 할 수 있습니다.

제가 말하고자하는 첫 번째 것은 MEF를 사용하고 있기 때문에 을 사용해야합니다. ServiceLocator을 사용할 필요가 없습니다. 가져 오기 IRegionManager! Prism의 다른 IoC 컨테이너보다 MEF에 대해 정말 좋아하는 또 다른 사항은 보통 IModule 구현을 작성하지 않는다는 것입니다. 귀하의 모듈은 속성으로 처리되므로 내보내기를 정의하지 않습니다. Attribute 사용자 지정 ViewRegion으로 내보내고이보기를 해당 지역에 등록하는 IModule 인프라를 만들었습니다. 귀하의 응용 프로그램에 Menu를 추가

, 내가 가장 좋은 방법은 별도의 View으로 Menu 수출이되어야 것이라고 생각합니다. 그러면 은 ContentControl이고, 그 외자는 MenuRegion입니다. Menu을 등록하는보기가 여러 개인 경우 기본보기가 변경 될 때 메뉴 영역에서 을 호출 할 수 있습니다. 물론 인프라의이 부분을 만들기 위해 인터페이스 (또는 기본보기를 장식하는 속성)를 사용하여 개별보기가 동일한 코드를 다시 작성할 필요가 없도록 할 수 있습니다.일부 글로벌 명령뿐만 아니라 수출 메뉴 명령을하려는 경우

, 당신은 가능성이 두 가지 중 하나를 수행해야 할거야 :

  • 를 추가하는 방법을 관리하는 사용자 정의 IRegionAdapter 만들기 메뉴 항목. 이 경우 최상위 수준 인 MenuItem 개체를 내보내는 것이 좋습니다. 지역으로 개별 MenuItem을 정의 할 수도 있습니다. FileMenuRegion처럼 File 메뉴에 MenuItem을 추가 할 수 있습니다. 명령을 추가하는 방법을 처리하는 특별한 MainMenuViewModel에서
  • 수출의 이름을 가진 ICommand을하고 ImportMany. 메뉴 계층을 만드는 방법을 알아야하기 때문에 좀 더 복잡 할 수도 있습니다. ICommand 수있는 것보다 더 완벽하게 메뉴를 설명 할 수있는 새로운 인터페이스가 필요할 것입니다.
+0

좋은 답변에 감사드립니다. 그것은 나를 더 많은 독서와 학습으로 이끈다. – ProfK