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
功能?它允许您创建导出的新实例,并在完成后释放它。这听起来像您想要在这里做的。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...