gpt4 book ai didi

c# - 如何确保只有一个View Model Base类实例?

转载 作者:行者123 更新时间:2023-12-03 11:03:33 25 4
gpt4 key购买 nike

我一直在构建WPF应用程序。到目前为止,大多数ViewModels都严格按照其自己的代码工作。
我最近决定创建一个基类“ApplicationViewModel”,将通用代码迁移到该基类中。在大多数情况下,这可以正常工作,但是我遇到了一个困难的问题。

看来我的继承 View 模型正在生成其自己的基本 View 模型实例。因此;如果ClassA中的方法更改了基类中的变量,则ClassB仍将相同的变量注册为null或之前的值。

最初,我认为在Microsoft的Unity容器中注册实例可以解决该问题,

public App()
{

Container.RegisterType<ApplicationViewModel>(new ContainerControlledLifetimeManager());
}

但这并没有改变。

经过研究,我发现的明显答案是将类静态化,但是在我选择这条路线之前,我希望有其他解决方案。我的程序太多功能可能需要重新处理。

我不确定单例实例属性是否可以与基类声明一起使用。

所以我想我的问题是:我如何确保在所有ViewModel中都使用相同的ViewModel基类实例?

最佳答案

How would I ensure the same instance of this viewmodel base class is used throughout all my ViewModels?



不可能。基类是从其继承的类的定义的一部分,即基类和派生类是同一实例的一部分。创建派生类的实例时,只会创建该类型的单个实例。基本类型是该类型的一部分。

如果只希望围绕继承的基类的单个实例不是解决方案。

相反,您可以使用每个 subview 模型中的 Container获得对共享 View 模型对象的引用:
public class ChildViewModel //doesn't inhert from the base view model
{
public ChildViewModel()
{
var sharedViewModel = Container.Resolve<ApplicationViewModel>();
//call any properties or methods of the sharedViewModel...
}
}

关于c# - 如何确保只有一个View Model Base类实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41936390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com