The*_*ias 5 wpf mef eventaggregator prism-4
我正在寻找一个"最佳实践"(如果有一个最好的),干净地关闭使用MEF和PRISM4的WPF应用程序.最终,我正在寻找某种"关闭服务"来管理从Shell到所有想要验证关闭应用程序的viewmodel(或其他订阅者)的事件/命令.事件聚合器是最干净的方式吗?其他意见/选择?
理想情况下,我的ToolbarRegion中的ToolbarView上有一个按钮(我的Shell中的2个区域中的1个).这个按钮会在我的ToolbarViewModel上调用一个命令(在我的ToolbarControler上引用一个命令),这反过来会做两件事(我想?)......首先,通知所有订阅者它是关闭时间并允许他们中的任何一个取消关闭然后......如果没有取消,以某种方式通知shell关闭.我的应用程序的关闭模式设置为"ShutdownMode.OnMainWindowClose",因此如果Shell关闭,我应该全部设置.
有人可以帮我解决这个问题吗?
我正在使用相同的东西开发一个大型应用程序:MEF 和 PrismV4
我对关闭的处理方式有点不同:
在 Shell 中,有一个“工具”区域,关闭是在关闭事件时在 Shell 中直接处理的。
然后,对于注入到另一个区域(即选项卡控件)中的所有内容,我将内容转换为 IDisposable,并一一关闭每个选项卡。(实际上,它不是一个 tabcontrol,它是一个 avalondock 组件,但实际上是同一件事)。
当然,您必须在每个有引用等要处理的类上实现 IDisposable,但是很难想到一种“干净的关闭方式”而不涉及该接口,对吗?=)
现在,关于 EventAggregator:您很可能会遇到麻烦,因为没有耦合:您可以通过它触发弱事件,但您不能等待对象在此之后完成其工作。
然后,你无法制定取消关闭的机制。
如果您希望各种视图能够取消关闭,我建议您创建一个包含单个方法的接口:
public interface IShutdownAware
{
bool CanShutdown();
}
Run Code Online (Sandbox Code Playgroud)
然后在调用 dispose 之前调用,CanShutdown();如果它们都返回 true,则继续进行 dispose,否则取消关闭过程。