2014-04-15 5 views
1

내 목표는 더러운 뷰 모델을 찾아 내고 앱을 종료 할 때 알려주도록해야합니다.MEF가 내가 수출 한 유형의 인스턴스를 생성했는지 알 수있는 방법이 있습니까

나는 아래의 코드를하지만, 문제의 유형에 따라 인스턴스를 얻을 수는 내가 이미 MEF 컨테이너에 의해 생성 된 것들에만 관심이 모든 뷰 모델의 인스턴스를 작성하는 것입니다

List<Type> viewModelInterfaces = new List<Type>(); 
     viewModelInterfaces .Add(typeof(IAddressViewModel)); 
     viewModelInterfaces .Add(typeof(ICustomerNameViewModel)); 
     viewModelInterfaces .Add(typeof(IBudgetSummaryViewModel)); 

     foreach (var appInterface in viewModelInterfaces) 
     { 
      var obj = Container.GetExports(appInterface, ull,appInterface.FullName).FirstOrDefault(); 
      if (obj != null) 
      { 
       var viewModel = obj.Value as IViewModelBase; 
       if (viewModel != null) 
       { 
        if (viewModel.IsDirty) 
        { 
         Show Dialog 
        } 
       } 
      } 
     } 

감사합니다

답변

0

MEF는 생성 된 모든 부품을 추적하지 않으므로 MEF에 내장 된 기능이 없습니다. 예를 들어, 생성 된 컨테이너는 NonShared 부분을 인식하지 못합니다 (부품이 IDisposable이 아닌 경우). You can see here "컨테이너 및 부품 참조"에서 정확히 어떤 유형의 MEF를 참조해야하는지 알려줍니다.

어느 쪽이든, 원하는대로 달성 할 수있는 다른 방법이 있습니다. 질문이 으로 태그되었으므로 간단히 IEventAggregator을 사용하여 모든보기 모델이 구독하고 해당 논리를 수행하는 이벤트를 게시 할 수 있습니다.

또는 각 뷰 모델의 생성자를 "더티 뷰 모델"목록에 추가하고 (이 목록을 다른 개체가 보유 할 수 있음) 응용 프로그램이 닫힐 때이 목록에 액세스 할 수 있습니다.