PRISM / Unity IDisposable

时间:2013-05-09 10:22:13

标签: wpf mvvm prism unity-container

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

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,并解决了这个问题:

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

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方法中放入我需要的清理代码。

希望这有帮助。

答案 1 :(得分:0)

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

Dispose()上手动

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