城堡windsor每窗口根范围

时间:2013-10-30 17:49:00

标签: castle-windsor

我想按照每个Window-root生活方式注册一些组件。

有没有人知道如何实现这个目标?

我知道我可以使用BoundTo生活方式并将我的服务绑定到窗口的根目录,但这种生活方式不支持动态解析的视图模型。

我的视图模型加载一些数据,然后通过工厂动态地为每个结果创建其他视图模型。

感谢任何提示!

2 个答案:

答案 0 :(得分:0)

可能不完全是你想要的,但我不确定我到底知道你要做什么:

如果您使用Windsor的类型化工厂功能并且您的工厂实现了idiposable,则处理您的工厂将处置它创建的所有组件。因此,如果您的窗口需要临时工厂(或工厂),您可以将它们放置在窗口处理中。

Typed factory docs here

答案 1 :(得分:0)

我终于自己解决了。

我创建了4个类:

  • WindowScope,定义WindowScope.Current
  • RootViewModelFactory,它创建所有根视图模型并为每个根视图模型创建一个新的WindowScope。
  • 一个ViewModelFactory,它将WindowScope.Current设置为它创建的范围,然后使用容器来解析此范围内的ViewModel。
  • WindowScopeAccessor(实现IScopeAccessor),它使用WindowScope.Current为每个窗口创建一个LifetimeScope。