2014-04-15 29 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中没有内置此类功能。例如,一旦创建,容器不知道任何部件(除非部件是IDisposable)。 You can see here在“容器和零件参考”下确切指出哪些类型的零件MEF保持参考。

无论哪种方式,你有其他的方式来实现你想要的。既然你已经标记了你的问题,你可以简单地使用IEventAggregator发布一个事件,所有viewmodels将订阅并执行其逻辑。或者,您可以让每个viewmodel的构造函数将自己添加到“dirty viewmodels”列表(此列表可以由另一个对象保存),然后在应用程序关闭时访问此列表。

相关问题