我想再试一次学习校准。 前几课很容易,但随着我的进步,事情变得复杂,我无法独自解决。
我设计了一个应用程序,用于覆盖大多数具有Conductor<IScreen>
类型的ShellViewModel的基础知识和一些实现IScreen
的ChildViews。我正在使用IOC容器来构建ViewModel和App中的相关资源。
其中一个孩子就像一个导航台,用户可以从中访问不同的子视图,这些子视图也支持导航到一个或两个其他视图。
当我查找介绍Screen和导体概念的样本时,通过调用ActivateItem(new ChildViewModel())
直接创建和激活视图模型的所有样本可能是为了简单起见,但我无法理解这些viewmodel创建可以委托给IOC容器而不依赖于它。
对于一个或两个屏幕至少我可以通过构造函数注入,但是当有很多视图时,用户可以从任何给定视图导航,并且每个视图都有自己的附加依赖项?
原谅初学者的愚蠢,任何人都能指出我正确的方向吗?
答案 0 :(得分:2)
您希望使用视图模型工厂,它们依赖于您的IoC容器。例如,您的ShellViewModel可以采用IViewModelFactory,它具有CreateNavigatorViewModel等方法,返回NavigatorViewModel(或INavigatorViewModel),此实现使用IoC容器来解析I / NavigatorViewModel。
一些IoC容器支持自动创建这些工厂,例如Castle.Windsor有一个Typed Factory Facility,Ninject有一个创建工厂类型的扩展,你只需定义工厂接口。