2013-05-09 64 views
1

我有一些模块在关闭时需要做一些整理工作,但看起来PRISM/Unity并不尊重IDisposable接口。有没有人有任何建议,我如何才能得到这个工作?PRISM/Unity IDisposable

+0

我的回答对你有帮助吗? – Dutts 2013-05-09 15:27:33

回答

2

我经历了同样的问题,解决了这个问题是这样的:

首先我创建一个自定义事件,让我信号我模块容器关闭:

public class ApplicationExitEvent : CompositePresentationEvent<string> { } 

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

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

然后在我的模块的初始化()方法,我订阅了这个事件:

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

并把我需要的清理代码放在我的模块的Dispose方法中。

希望这会有所帮助。

0

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

Dispose()您的容器中手动上Application.Exit,和所有一次性模块(从这个容器的其他解决共享的一次性部件)应该称他们IDisposable.Dispose()方法。