我在Caliburn-Micro Silverlight应用程序中使用Castle-Windsor作为我的容器。我的ViewModel对象相当粗糙,因为它们调用WCF服务和其他一些东西。因此,当窗口关闭时,我想调用container.Release(viewModel),以便Castle可以管理整个退役/处置过程,尊重配置的各种生命周期(如this post中所述)。
在我的AppBootstrapper中,我按如下方式覆盖了GetInstance:
protected override object GetInstance(Type serviceType, string key)
{
if (string.IsNullOrEmpty(key)) return container.Resolve(serviceType);
return container.Resolve(key, serviceType);
}
但是我正在努力想出一种干净/优雅的方式来调用container.Release(viewModel)
。似乎没有任何钩子可用于此。
在Caliburn Micro应用程序中发布从ViewModelLocator返回的ViewModel对象的最简单方法是什么?
答案 0 :(得分:0)
您希望每种虚拟机类型的生命周期都会产生影响,因此您提供的上下文并没有真正正确的答案。
CM的Screen
基类为您提供protected virtual void OnDeactivate(bool close);
,这是一个很好的起点。对于重量级虚拟机,您应该覆盖此方法,如果VM正在关闭参数指示关闭,则释放需要处理的任何资源(WCF通道等),这将包括处置资源(如果IDisposable
是相关的)并且还断开对它的任何引用,以便GC可以清除它。
我不使用Castle,所以在配置生命周期等方面我无法帮助你。但是如果你遵循上述规则,你就不会坚持任何重量级的东西。我假设使用正确的生命周期配置,Castle将清除任何您不会再使用的旧实例,而无需显式调用Release
。