我有一些模块需要在关闭时进行一些整理工作,但似乎PRISM/Unity不尊重IDisposable接口。有没有人有关于如何让它正常工作的建议?
我有一些模块需要在关闭时进行一些整理工作,但似乎PRISM/Unity不尊重IDisposable接口。有没有人有关于如何让它正常工作的建议?
我遇到了同样的问题,并通过以下方式解决:
首先,我创建了一个自定义事件,以便向我的模块发出信号,表明容器正在关闭:
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方法中。
希望这可以帮到你。
很可能您的模块未被处理,因为它们在容器中注册为单例(共享)组件。
在Application.Exit
时手动Dispose()
您的容器,所有可处理的模块(以及来自该容器的其他解析的共享可处理组件)应调用其IDisposable.Dispose()
方法。