【问题标题】:PRISM/Unity IDisposablePRISM/Unity IDisposable
【发布时间】:2013-05-09 10:22:13
【问题描述】:

我有一些模块在关闭时需要做一些整理工作,但是 PRISM/Unity 似乎不尊重 IDisposable 接口。有人对我如何使这项工作有任何建议吗?

【问题讨论】:

  • 我的回答对你有帮助吗?

标签: wpf mvvm prism unity-container


【解决方案1】:

我遇到了同样的问题,然后这样解决了:

首先,我创建了一个自定义事件,以允许我向我的模块发出容器正在关闭的信号:

public class ApplicationExitEvent : CompositePresentationEvent<string> { }

然后在我的引导程序中,我实现 IDisposable 并在我的 Dispose() 方法中触发事件:

    public void Dispose()
    {
        var eventAggregator = Container.Resolve<IEventAggregator>();
        if (eventAggregator != null)
        {
            eventAggregator.GetEvent<ApplicationExitEvent>().Publish("");
        }
    }

然后在我模块的 Initialize() 方法中订阅此事件:

EventAggregator.GetEvent<ApplicationExitEvent>().Subscribe((o) => Dispose(), true);

并将我需要的任何清理代码放入模块的 Dispose 方法中。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    很可能您的模块没有被释放,因为它们在容器中注册为单例(共享)组件。

    Dispose()您的容器手动在Application.Exit 上,并且您的所有一次性模块(以及该容器中其他已解析的共享一次性组件)都应该调用其IDisposable.Dispose() 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 2011-07-29
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多