【问题标题】:Is there a way to tell if MEF created an instance for a type I exported有没有办法判断 MEF 是否为我导出的类型创建了一个实例
【发布时间】:2014-04-15 14:59:59
【问题描述】:

我的目标是找到任何脏的视图模型,当它们退出应用程序时,我应该让它们通知。

我可以通过下面的代码根据类型获取实例,但问题是它会为所有视图模型创建实例,因为我只对 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
                    }
                }
             }
         }

谢谢

【问题讨论】:

    标签: c# .net wpf mef prism-4


    【解决方案1】:

    MEF 不会跟踪其创建的所有部件,因此 MEF 中没有内置此类功能。例如,一旦创建,容器就不会知道任何NonShared 部分(除非这些部分是IDisposable)。 You can see here 在“容器和部件引用”下,MEF 一直引用的部件类型。

    无论哪种方式,您都有其他方法可以实现您想要的。由于您已将问题标记为 ,因此您可以简单地使用 IEventAggregator 发布一个所有视图模型都将订阅并执行其逻辑的事件。

    或者,您可以让每个视图模型的构造函数将自己添加到“脏视图模型”列表(此列表可以由另一个对象持有),然后在应用程序关闭时访问此列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      • 2012-04-17
      • 2013-09-04
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多