繁体   English   中英

有没有办法告诉我MEF是否为我导出的类型创建了实例

[英]Is there a way to tell if MEF created an instance for a type I exported

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

我可以通过下面的代码根据类型进入实例,但是问题在于它将为所有视图模型创建实例,因为我只对那些已经由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
                    }
                }
             }
         }

谢谢

MEF不会跟踪其所有已创建的零件,因此MEF中没有内置此类功能。 例如,一旦创建,容器将不知道任何非NonShared部分(除非这些部分是IDisposable )。 您可以在“容器和零件引用”下看到 MEF确切引用的零件类型。

无论哪种方式,您都有其他方式来实现所需的目标。 既然已经标记了问题 ,就可以简单地使用IEventAggregator来发布所有视图模型都将订阅并执行其逻辑的事件。

或者,您可以让每个viewmodel的构造函数将自身添加到“脏viewmodels”列表中(此列表可以由另一个对象保存),然后在应用程序关闭时访问此列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM