在校准中使用屏幕和IOC的正确方法

时间:2012-07-29 12:51:59

标签: wpf caliburn.micro

我想再试一次学习校准。 前几课很容易,但随着我的进步,事情变得复杂,我无法独自解决。

我设计了一个应用程序,用于覆盖大多数具有Conductor<IScreen>类型的ShellViewModel的基础知识和一些实现IScreen的ChildViews。我正在使用IOC容器来构建ViewModel和App中的相关资源。

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

当我查找介绍Screen和导体概念的样本时,通过调用ActivateItem(new ChildViewModel())直接创建和激活视图模型的所有样本可能是为了简单起见,但我无法理解这些viewmodel创建可以委托给IOC容器而不依赖于它。

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

原谅初学者的愚蠢,任何人都能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

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

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