是否可以使整个WPF应用程序都可以使用非静态类的实例?

懒惰的阿姆斯特朗

我有一个WPF应用程序,它是由一个MainWindow,具有多种一起Page,可以通过访问的对象MainWindow我目前有一个User在中实例化ViewModelMainWindow它定义了权限属性,这些属性绑定到相应的各种属性中View

public NavigationViewModel()
{
    _currentUser = new User(_currentServerConnection, Environment.UserName);

现在,我想User在每个Page对象的中访问相同的实例ViewModels从设计的角度来看,最合适的方法是什么?我已经阅读了StackOverflow上的多个线程,并得出的结论是,我应该创建此类static(在这里没有意义,此类具有state),或在每个实例中对其进行实例化ViewModel我还有其他选择吗?哦,我也阅读了有关Singleton类的信息,显然不建议这样做。我觉得我在这里缺少一些基本概念。

罗尤斯

不建议使用Singleton。建议不要在错误的地方或使用错误的方式使用单例。

您的整个问题都被当成是使用单例的好时机的“正确”和“正确”示例。

如果您绘制设计图,并且代码中大量对象指向另一个对象的完全相同的实例,并且不再需要该对象的第二个实例,那么您已经找到了单例的正确用法。根据您的描述,您处于这种情况。

现在,您还可以使用静态。静态和单例之间的唯一区别是,单例直到第一次使用才被实例化。由于加载后可能会有一个登录名,因此您最好等到第一次登录尝试实例化您的单例。这就是为什么要在静态对象上使用单例。

public class GlobalSettings : IGlobalSettings
{
    public static GlobalSettings Instance
    {
        get { return _Instance ?? (_Instance = new GlobalSettings()); }
    } static GlobalSettings _Instance;

    public GlobalSettings() 
    {
    }

    // More methods/properties here
}

单例也可以在带锁的多线程应用程序中正常工作。请参阅这篇文章:http : //msdn.microsoft.com/en-us/library/ff650316.aspx

单例也很容易进行单元测试或在IOC中使用。否则,任何人都没有意识到您可以简单地使用接口来描述单例,然后所有使用单例的对象都可以具有该接口的实例。除非已经有IOC libray,否则我将使用如下所示的惰性属性注入。为此,我不会包括IOC库的膨胀。

    public static IGlobalSettings Settings
    {
        get { return _Settings ?? (_Settings = GlobalSettings.Instance); }
    } static IGlobalSettings _Settings;

或者,也可以让您的IOC控制器/工厂每次将您的Singleton实例作为界面返回。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否可以使整个WPF应用程序都可以使用非静态类的实例?

来自分类Dev

是否可以使所有GUI linux应用程序都可以使用X服务器工作?

来自分类Dev

任何人都可以使用任何Java应用程序的代码吗?

来自分类Dev

如何通过 Google 帐户登录使用 C#(WPF) 将视频上传到 YouTube,以便每个人都可以使用我的应用程序

来自分类Dev

如何给出每台机器都可以使用的路径(因此应用程序要崩溃)

来自分类Dev

如何设置全局节点模块,以便所有应用程序都可以使用相同的模块

来自分类Dev

Lookit不会生成所有图像查看应用程序都可以使用的PNG文件

来自分类Dev

在所有应用程序中都可以使用Ctrl + X和Ctrl + V,但不能使用Ctrl + C

来自分类Dev

使用Nodejs是否可以使用桌面应用程序?

来自分类Dev

是否可以使用非功能语言来构建响应式应用程序?

来自分类Dev

是否可以使用swift 3.0为非iOS 10设备创建应用程序?

来自分类Dev

是否可以使用Protractor测试任何非AngularJS应用程序?

来自分类Dev

是否可以使用PHP开发Windows应用程序?

来自分类Dev

是否可以使用内置终端调试应用程序

来自分类Dev

是否可以使用JavaScript制作GUI应用程序?

来自分类Dev

是否可以使用Xcui测试Web应用程序?

来自分类Dev

单例使用 - 如何让所有类都可以使用数据?

来自分类Dev

使bat文件到处都可以使用吗?

来自分类Dev

使所有组件都可以使用 Angular 服务

来自分类Dev

无论线程库如何,我们都可以使用Mutex类吗?

来自分类Dev

节点js中所有集群节点是否都可以使用“ COMMON”变量?

来自分类Dev

节点js中所有集群节点是否都可以使用“ COMMON”变量?

来自分类Dev

在Android和ubuntu中都可以使用任何规范的聊天通讯程序吗?

来自分类Dev

在所有版本的excel中都可以使用的程序

来自分类Dev

在Android和ubuntu中都可以使用任何规范的聊天通讯程序吗?

来自分类Dev

任何用于网站的 android 模板示例的开源都可以使用模板引导程序

来自分类Dev

是否可以有XML,适当的XSD,可以选择maxOccurs =“ 1”,而每个元素都可以使用minOccurs =“ 1”?

来自分类Dev

如何创建可以使用整个应用程序的动态值

来自分类Dev

如何制作一个在块的整个生命周期内都可以使用的Ruby方法?

Related 相关文章

  1. 1

    是否可以使整个WPF应用程序都可以使用非静态类的实例?

  2. 2

    是否可以使所有GUI linux应用程序都可以使用X服务器工作?

  3. 3

    任何人都可以使用任何Java应用程序的代码吗?

  4. 4

    如何通过 Google 帐户登录使用 C#(WPF) 将视频上传到 YouTube,以便每个人都可以使用我的应用程序

  5. 5

    如何给出每台机器都可以使用的路径(因此应用程序要崩溃)

  6. 6

    如何设置全局节点模块,以便所有应用程序都可以使用相同的模块

  7. 7

    Lookit不会生成所有图像查看应用程序都可以使用的PNG文件

  8. 8

    在所有应用程序中都可以使用Ctrl + X和Ctrl + V,但不能使用Ctrl + C

  9. 9

    使用Nodejs是否可以使用桌面应用程序?

  10. 10

    是否可以使用非功能语言来构建响应式应用程序?

  11. 11

    是否可以使用swift 3.0为非iOS 10设备创建应用程序?

  12. 12

    是否可以使用Protractor测试任何非AngularJS应用程序?

  13. 13

    是否可以使用PHP开发Windows应用程序?

  14. 14

    是否可以使用内置终端调试应用程序

  15. 15

    是否可以使用JavaScript制作GUI应用程序?

  16. 16

    是否可以使用Xcui测试Web应用程序?

  17. 17

    单例使用 - 如何让所有类都可以使用数据?

  18. 18

    使bat文件到处都可以使用吗?

  19. 19

    使所有组件都可以使用 Angular 服务

  20. 20

    无论线程库如何,我们都可以使用Mutex类吗?

  21. 21

    节点js中所有集群节点是否都可以使用“ COMMON”变量?

  22. 22

    节点js中所有集群节点是否都可以使用“ COMMON”变量?

  23. 23

    在Android和ubuntu中都可以使用任何规范的聊天通讯程序吗?

  24. 24

    在所有版本的excel中都可以使用的程序

  25. 25

    在Android和ubuntu中都可以使用任何规范的聊天通讯程序吗?

  26. 26

    任何用于网站的 android 模板示例的开源都可以使用模板引导程序

  27. 27

    是否可以有XML,适当的XSD,可以选择maxOccurs =“ 1”,而每个元素都可以使用minOccurs =“ 1”?

  28. 28

    如何创建可以使用整个应用程序的动态值

  29. 29

    如何制作一个在块的整个生命周期内都可以使用的Ruby方法?

热门标签

归档