Prism 6 和构造函数调用
Prism 6 and constructor calling
根据 Brian Lagunas (YouTube Link) 的视频,我开始使用 Prism 6。我有点困惑,MainWindowViewModel 的构造函数被调用的地方。我几乎复制了他的项目,但找不到那部分。如果我在构造函数中设置断点,它永远不会到达那里。
他是不是没有在视频里展示什么东西?
如果您查看此演示文稿的 code,您会发现 Brian 正在使用 Prism 的附加依赖项 属性 通过 ViewModelLocator 耦合视图和视图模型。
prism:ViewModelLocator.AutoWireViewModel="True"
在 33:00 周围的视频中,他给出了此 ViewModelLocator 的工作原理的完整解释:首先,它通过约定从视图名称构建视图模型名称。然后它通过 IoC 容器或反射将此名称解析为类型。 IoC 非常简单:给一个类型或名称,它就会给你一个实例。对于反射部分(当你 运行 没有容器时),Prism 使用 Activator type to create a new instance.
在 GitHub 上可用的最终代码中,Brian 使用 Unity 作为 IoC 容器。他的子视图 (ViewA/ViewB) 的自定义映射是在 Bootstrapper 中创建的。由于 MainViewModel 没有自定义映射,因此会发生以下过程:
- 应用程序以 MainWindow 作为启动 window。
- ViewModelLocator 的附加 属性 获得 'triggered',内部逻辑将从 MainWindow 映射到 MainWindowViewModel
- 当我们使用 Unity 时,ViewModelLocator 需要一个视图模型的实例
- Unity 将创建一个新的 MainWindowViewModel 对象并且构造函数将被命中
所以您不会在代码中看到新的 xxxViewModel(),但它确实被创建了。这意味着在添加依赖项时,您比硬编码对象创建具有更大的灵活性。
根据 Brian Lagunas (YouTube Link) 的视频,我开始使用 Prism 6。我有点困惑,MainWindowViewModel 的构造函数被调用的地方。我几乎复制了他的项目,但找不到那部分。如果我在构造函数中设置断点,它永远不会到达那里。
他是不是没有在视频里展示什么东西?
如果您查看此演示文稿的 code,您会发现 Brian 正在使用 Prism 的附加依赖项 属性 通过 ViewModelLocator 耦合视图和视图模型。
prism:ViewModelLocator.AutoWireViewModel="True"
在 33:00 周围的视频中,他给出了此 ViewModelLocator 的工作原理的完整解释:首先,它通过约定从视图名称构建视图模型名称。然后它通过 IoC 容器或反射将此名称解析为类型。 IoC 非常简单:给一个类型或名称,它就会给你一个实例。对于反射部分(当你 运行 没有容器时),Prism 使用 Activator type to create a new instance.
在 GitHub 上可用的最终代码中,Brian 使用 Unity 作为 IoC 容器。他的子视图 (ViewA/ViewB) 的自定义映射是在 Bootstrapper 中创建的。由于 MainViewModel 没有自定义映射,因此会发生以下过程:
- 应用程序以 MainWindow 作为启动 window。
- ViewModelLocator 的附加 属性 获得 'triggered',内部逻辑将从 MainWindow 映射到 MainWindowViewModel
- 当我们使用 Unity 时,ViewModelLocator 需要一个视图模型的实例
- Unity 将创建一个新的 MainWindowViewModel 对象并且构造函数将被命中
所以您不会在代码中看到新的 xxxViewModel(),但它确实被创建了。这意味着在添加依赖项时,您比硬编码对象创建具有更大的灵活性。