MEF问题 - ExportFactory <t> - 调用Dispose方法</t>

时间:2011-01-04 19:03:20

标签: c# mef dispose

如果可能的话,在使用ExportFactory创建的对象上调用dispose方法?

工厂在这里:

public  interface IViewModelsControler
{
    IChatViewModel CreatChatViewModel();
}

[Export(typeof(IViewModelsControler))]
public class ViewModelsControler:IViewModelsControler
{

    [Import]
    public ExportFactory<IChatViewModel> ChatViewFactory { get; set; }

    public IChatViewModel CreatChatViewModel()
    {
        return ChatViewFactory.CreateExport().Value;
    }
}

创建对象:

var chatScreen = ViewModelControler.CreatChatViewModel();

我想调用chatScreen.Dispose()。

ChatViewModel调用如下所示:

[Export(typeof(IChatViewModel))]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class ChatViewModel : Screen, IChatViewModel
    {}

2 个答案:

答案 0 :(得分:2)

您应该在对CreateExport()的调用返回的ExportLifetimeContext上调用dispose,而不是在导出的值本身上调用dispose。这不仅会处理ViewModelController,还会处理为满足其导入而创建的任何NonShared一次性部件。

答案 1 :(得分:0)

您的chatScreen合约需要公开Dispose()方法。

public interface IViewModelsControler
{
    IChatViewModel CreatChatViewModel();
    void Dispose();    // add to expose your dispose method
}

这是关于垃圾收集的另一个answer,如果这就是你想要的。