首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Caliburn Micro和Castle Windsor中ViewModels的处理

Caliburn Micro和Castle Windsor中ViewModels的处理
EN

Stack Overflow用户
提问于 2012-03-06 20:31:12
回答 1查看 2.8K关注 0票数 5

我使用Castle-Windsor作为Caliburn-Micro Silverlight应用程序中的容器。我的ViewModel对象相当笨重,因为它们调用WCF服务和一堆其他东西。因此,当窗口关闭时,我想调用container.Release(viewModel),这样Castle就可以管理整个退役/处置过程,同时考虑到配置的各种生命周期(如this post中所述)。

在我的AppBootstrapper中,我覆盖了GetInstance,如下所示:

代码语言:javascript
复制
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对象的最简单方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2012-03-16 05:54:18

您想要的每种VM类型的生命周期将在这里产生影响,因此对于您提供的上下文,没有真正正确的答案。

CM的Screen基类提供了protected virtual void OnDeactivate(bool close);,这是一个很好的起点。对于重量级VM,您应该重写此方法,如果VM正在关闭,请释放需要释放的任何资源(WCF通道等),这将包括释放资源(如果IDisposable是相关的),并断开对它的任何引用,以便GC可以清除它。

我不使用Castle,所以我不能在配置生命周期等方面帮助你。但是如果你遵循上面的步骤,你将不会坚持任何重量级的东西。我假设,使用正确的生命周期配置,Castle将清除任何旧实例,如果不显式调用Release,这些实例将不会再使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9583760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档