在整个应用程序中保持对象的实例可用

时间:2014-05-30 17:30:39

标签: c# wpf xaml

昨天我在暑期实习期间获得了一个项目,要求在Visual Studio 2010中使用XAML和C#来制作我创建的控制台应用程序的WPF版本。不幸的是,直到3天前我都没有任何一种语言的经验,所以虽然这个问题的解决方案可能很简单,但它无法逃脱我,我无法在网上找到任何可用的解决方案

基本上,当我启动这个WPF应用程序时,我想实例化一个在C#中的应用程序内定义的对象。我希望该类的实例在应用程序运行的整个时间内可用。我想知道这是否可以通过为应用程序创建全局资源来实现,但据我所知,只能为XAML资源完成。

任何帮助和想法将不胜感激。如果我写的任何内容太模糊,请告诉我,我会尽力澄清

2 个答案:

答案 0 :(得分:2)

资源通常用于XAML类型的东西(样式,转换器实例等)。

这似乎是静态类的一个很好的用例。静态类在第一次使用时被实例化,并且只有一个实例。您还可以使用单例(通常利用静态成员)。

请注意,单身人士可以成为代码气味,但如果您知道自己需要代码气味,请继续进行!资源不是去这里的方式。

快速单身示例:

public class MyGlobalClass
{
    private Lazy<MyGlobalClass> _instance = new Lazy<MyGlobalClass>();
    public static MyGlobalClass Instance { get { return _instance.Value; } }

    //Whatever else, accessed by MyGlobalClass.Instance.<Whatever>
}

答案 1 :(得分:0)

看起来BradleyDotNet有基本答案。此外,您可能希望研究使用IoC容器并让它管理单例实例。所以没有静态,没有实现单例模式,只需让IoC容器处理这个责任。

另外一点需要注意,静态!=线程安全所以如果有多个线程访问你的单例对象,请确保考虑线程安全。