2008-09-08 5 views
1

PRISM (Composite WPF Guidance/Library)을 사용하여 응용 프로그램을 작성하는 것을 고려하고 있습니다. 애플리케이션 모듈은 수직으로 분할됩니다 (예 : 고객, 공급 업체, 판매 주문 등). 이것은 여전히 ​​상대적으로 쉽습니다 ... 또한 주요 영역이있는 셸이 모든 작업이 수행되지만 이제는 다음과 같은 동작이 필요합니다. 주 셸에서 메뉴가 필요하고 각 옵션 중 하나가 클릭 될 때 고객, 공급 업체 등) 모듈을 찾아 지역에로드해야합니다 (한번에 한 번에 한 번씩보기).PRISM이 도움이됩니까?

이 유형의 동작을하는 샘플 애플리케이션을 아는 사람이 있습니까? 모든 샘플은 메인 셸에 모든 모듈을로드하는 데 더 중점을 둡니까? 내 메뉴 막대도 모듈이어야합니까?

[업데이트] 메뉴에서 선택한 모듈을 기반으로 영역에 모듈을 주입하려면 어떻게합니까? 모든 예는 모듈이 초기화 할 때 영역에 뷰를 주입하는 것을 보여줍니다? 모듈을 메뉴에서 선택하면 뷰를 삽입해야합니까?

+0

PRISM은 모듈 언로드를 허용하지 않으므로 모듈이 표시되지 않아도 여전히 메모리에 앉아 있습니다. –

답변

0

"모듈을 찾아서 지역에로드하십시오"라는 것이 무슨 뜻인지 확실하지 않습니다. 모듈보기를로드하여 쉘에 추가 할 수 있습니다. Composite UI app 블록과 CompositeWPF는 IoC 패턴 위에 구축됩니다. 이것은 모듈이 쉘의 메뉴 스트립에 메뉴 항목을 주입하거나 쉘에 의해 생성 된 이벤트에 가입해야 함을 의미합니다.

0

주 영역을 ContentControl으로 설정할 수 있습니다. 이렇게하면 한 번에 하나의보기 만 활성화됩니다. "On Demand"모듈을로드 할 수도 있습니다. 이 작업을 수행하는 방법을 보여주는 빠른 시작이 있습니다. 또한 모듈이 이미 한 번 초기화 된 경우 두 번째 초기화하면 모듈의 Initialize() 메서드가 실행되지 않습니다. 메뉴를 클릭하면 필요에 따라 모듈이로드되고 (보기를 아직로드하지 않음) EventAggregator를 통해 이벤트를 시작하여 모듈이 뷰를 추가 할 수 있습니다. 뷰 twrice를 추가하지 않는 명명 된 접근법) 및 뷰 활성화 (뷰가 해당 region에서 shwon인지 확인). 이 도움이

희망,

4

예 PRISM이 도움을줍니다.

여기에 언급 할 가치가있는 여러 가지 항목이 있습니다.

RE : 내게 맞는 프리즘입니까?

주문형 모듈을로드 할 수 있습니다. PRISM에는 RunTime에 모듈을로드 할 수있는 기능이 있으므로 Shell 및 ModuleA를 사용하여 해당 솔루션을 부팅하는 경우 귀하의 경우입니다. 그런 다음 사용자가 이벤트 (예 : 메뉴 선택)를 트리거하면 ModuleB를 동적으로로드 한 다음이를 실행에 넣을 수 있습니다. 분명히 말하자면, 모듈 B가 다른 모듈 등에 의존하지 않는지 확인해야 할 필요가있을 때 실제로 앉아서 숙제를해야합니다 (일반적으로 인프라 모듈을 사용하는 것이 현명합니다.) 기술을 사용했습니다. 여기서 모듈의 매니페스트는 절대 종속성을 나열한 XML에서 조회 한 다음 먼저로드되었는지 확인한 다음 ModuleB를로드합니다.

PRISM 도움말 문서 (개발 활동)를 통해을 요청시로드 모듈 을 참조하십시오.또한 원격을 다운로드 할 수있는 모듈을 준비 조회

RE : 런타임에보기를 주입하는

이 메뉴를 통해 지역에보기를 삽입하려면입니다 IRegionManager 액세스하는 간단한 케이스 그것을 추가하십시오. 이렇게하려면 넣어 사용하고 상기 뷰 모델/발표자/컨트롤러 당신을 위해 당신의 생성자에서 확인하십시오 :

MyConstructor(IRegionManager regionManager, IUnityContainer container) 

당신은 거의 당신이 당신의 구조로 원하는 개체를 추가 할 수 있으며 PRISM 그것을 보장합니다 PRISM와 마찬가지로 시간과 예산 (hehe)에 거기 도착한다. 당신이보기를 추가로 걸릴 것이 그 정상적인 접근 방식에서

... 예 :

IMyViewInstance myViewInstance = this.container.Resolve<IMyViewInstance>(); 
IRegion myRegion = this.regionManager.Regions["YourRegion"]; 
myRegion.add(myViewInstance); 
myRegion.Active(myViewInstance); 

그리고 모두 함께 와야한다! :)

참고 :

  • 당신이 구축 (this.container = 용기 등)의 컨테이너와 regionManager의 로컬 참조를 설정해야합니다.
  • 위의 네임 스페이스가 어디에 있는지 잘 모르겠 으면 예를 들어 IUnityContainer를 마우스 오른쪽 단추로 클릭하고 Visual Studio에서 마우스 오른쪽 단추를 클릭하면 해결됩니다.
  • 메뉴 방법에 추가 논리를 삽입하거나 중앙 방법 사용 - 어느 쪽이든 머리카락을 날려 버리십시오.

Scott Barnes - Rich Platforms 제품 관리자 - Microsoft.

관련 문제