我应该在容器中注册ViewModel并从容器中解析吗?
好处: 1. 当视图模型被激活时,我可以执行一些操作 2. 容器将为我注入依赖项 3. ???
缺点: 1. 视图模型的生命周期管理可能会有些棘手: - 如果我将ViewModel设置为单例,则无法实例化相同类型的多个控件 - 如果我使ViewModel短暂,则很容易出现实际期望注入相同实例而得到多个不同实例的情况。 2. ???
什么是正确的答案?如果我能够减轻生存期问题,我更倾向于注册。
我正在使用Caliburn和Autofac,如果这有关系。
好处: 1. 当视图模型被激活时,我可以执行一些操作 2. 容器将为我注入依赖项 3. ???
缺点: 1. 视图模型的生命周期管理可能会有些棘手: - 如果我将ViewModel设置为单例,则无法实例化相同类型的多个控件 - 如果我使ViewModel短暂,则很容易出现实际期望注入相同实例而得到多个不同实例的情况。 2. ???
什么是正确的答案?如果我能够减轻生存期问题,我更倾向于注册。
我正在使用Caliburn和Autofac,如果这有关系。
StatusBarViewModel
注入到MainWindowViewModel
中。相反,你会将类似IStatusContext
的东西注入到 两个StatusBarViewModel
和MainWindowViewModel
中。如果你使用InstancePerLifetimeScope
注册IStatusContext
,你就可以在不损害视图模型/视图基数的情况下获得所需的结果。 - Bryan WattsStatusBarViewModel
注入到StatusBarService
中。而我则建议完全相反:IStatusContext
应该是两个视图模型之间通信的点,但它本身不引用任何视图模型。因此,只需要解决一次StatusBarViewModel
,就可以避免那些问题。 - Bryan Watts