2

我想尝试再次学习caliburn。前几节课很简单,但随着我的进步,事情变得复杂了,我无法独自解决。

我设计了一个应用程序,目的是涵盖大多数具有 ShellViewModel 类型Conductor<IScreen>和一些实现 .Im 的 ChildViews的基础知识。我正在IScreen使用 IOC 容器来组合应用程序中的 ViewModels 和相关资源。

其中一个孩子就像一个导航台,用户可以从中访问不同的子视图,并且这些子视图也支持导航到一个或两个其他视图。

当我寻找介绍屏幕和导体概念的示例时,所有这些示例都通过调用直接创建和激活视图模型ActivateItem(new ChildViewModel()),可能是为了简单起见,但我无法理解如何将这些视图模型创建委托给 IOC 容器而不依赖它。

对于至少一两个屏幕,我可以通过构造函数注入,但是当有很多视图时,用户可以从任何给定视图导航并且每个视图都有自己的附加依赖项怎么办?

原谅初学者的愚蠢,谁能指出我正确的方向?

4

1 回答 1

2

您想使用依赖于 IoC 容器的视图模型工厂。例如,您的 ShellViewModel 可以采用具有 CreateNavigatorViewModel 等方法的 IViewModelFactory,该方法返回 NavigatorViewModel(或 INavigatorViewModel),并且此实现使用 IoC 容器来解析 I/NavigatorViewModel。

一些 IoC 容器支持自动创建这些工厂,例如 Castle.Windsor 有一个 Typed Factory Facility,而 Ninject 有一个创建工厂类型的扩展,您只需定义工厂接口。

于 2012-07-29T13:47:05.297 回答