如何解决MEF-如果使用MEF,如何创建新的ViewModel或重置其状态?另外,如何避免内存问题?
| 基本上,我担心两件事:[Export]
public class FooViewModel : NotificationObject
{
[Import]
public IService1 Service1 { get; set; }
[Import]
public IService2 Service2 { get; set; }
[Import]
public BarViewModel MyBar { get; set; }
etc.
//This is already initialized
public ObservableCollection<NotificationObject> CollectionOfViewModels { get; set; }
public void SetupViewModels1()
{
CollectionOfViewModels.Clear();
CollectionOfViewModels.Add(MyBar);
CollectionOfViewModels.Add(MyOtherBar);
CollectionOfViewModels.Add(My3rdViewModel);
etc.
}
public void SetupViewModels2()
{
CollectionOfViewModels.Clear();
CollectionOfViewModels.Add(MyBar);
CollectionOfViewModels.Add(My4thViewModel);
etc.
}
}
[Export]
public class BarViewModel : NotificationObject
{
[Import]
public IService1 Service1 { get; set; }
[Import]
public IService2 Service2 { get; set; }
//This is initialized and then the user starts adding values to it.
public ObservableCollection<Object> SomeObjects { get; set; }
public void DoSomething() { ... }
}
(1)问题#1,我加载了FooViewModel,一切都很好。我选择加载我的第一组ViewModel来进行一些处理。然后,当我加载第二组ViewModel时,BarViewModel仍然是相同的实例(因此它的所有属性都是相同的,包括SomeObjects
属性。如何告诉它重新初始化自身,以便所有它都数据被清除了吗?如果我改为MyBar = new MyBar()
,那么MyBar不会初始化IService1
或IService2
(因为MEF没有初始化它,所以我做了)。
(2)问题2,当我不使用其他ViewModel时,它们仍驻留在内存中,因为我是通过MEF导入它们的,这意味着它们的状态也都存在,这意味着大量大型收藏品正吞噬着我记忆。当您不再使用ViewModel时,如何完全摆脱它呢?
在使用MEF之前,请先执行以下操作:
CollectionOfViewModels.Clear();
CollectionOfViewModels.Add(new MyBar());
etc.
这意味着当我做完下一个ViewModels集时,立即“ 6”不再再引用该集合中的任何ViewModel,并且GC会收集它们。就目前而言,这样做实际上并没有摆脱任何ViewModel。
解决方法
您是否熟悉MEF的
ExportFactory
功能?它允许您创建导出的新实例,并在完成后释放它。这听起来像您想要在这里做的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。