MEF 问题 - ExportFactory- 调用Dispose方法

发布于 2024-10-10 11:38:27 字数 825 浏览 5 评论 0原文

如果可能的话,对使用 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
    {}

If possible call dispose method on object which is created with ExportFactory?

Factory is here:

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;
    }
}

Creation of object:

var chatScreen = ViewModelControler.CreatChatViewModel();

I would like call chatScreen.Dispose().

ChatViewModel call look like this:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

空城旧梦 2024-10-17 11:38:27

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

You should call dispose on the ExportLifetimeContext returned by the call to CreateExport(), not on the exported value itself. This will dispose not just the ViewModelController, but any NonShared disposable parts that were created to satisfy its imports.

朦胧时间 2024-10-17 11:38:27

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

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

这是关于垃圾收集的另一个答案(如果这就是您所追求的)。

Your contract for chatScreen needs to expose the Dispose() method.

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

Here is another answer regarding garbage collection if that is what you are after.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文