.Net应用程序范围的变量

时间:2009-08-23 20:36:20

标签: c# .net singleton

我对.Net相当新...我有几个查询将在应用程序加载时执行。我希望这些查询将数据存储在整个应用程序中可访问的对象(数据集?)中。我应该使用单身人士课吗?我的应用程序中的用户控件如何引用主应用程序代码中的公共变量?

我想我还没有找到关于存储应用程序变量的方式/位置以及如何在需要填充ListBox,DataGridView等时引用它们的良好资源。

作为背景我最熟悉使用Flex Builder 3进行开发,对于模糊的问题感到抱歉...我在找到关于主题的好参考时遇到了问题(不只是填充控件,而是存储数据)在应用程序级别并从应用程序内的任何位置引用它。)

编辑:这是用于使用C#

编写Windows窗体应用程序

4 个答案:

答案 0 :(得分:2)

听起来您正在使用ASP.NET,在这种情况下Application State(MSDN)将允许您存储和检索可从应用程序中的任何位置访问的应用程序范围的数据。

更多信息:

How to: Save Values in Application State

How to: Read Values from Application State

如果您正在编写桌面应用程序,则应创建一个包含应用程序范围数据的静态类,例如:

public static class ApplicationSettings
{
    public static string InstallDirectory { get { ... } set { ... } };
    public static DataSet SomeDataSet { get { ... } set { ... } };


    static ApplicationSettings()
    {
       // ... initialize or load settings here
    }
}

这里不需要单身,但是如果你确实需要延迟初始化和线程satefy,你可能想要采用那条路线。

答案 1 :(得分:1)

您可以将信息存储在App.config文件中,并使用AppSettingsReader类来访问数据。

编辑:看到您不想多次查询信息,您可以使用Singleton访问和缓存数据。

答案 2 :(得分:0)

只要应用程序的主窗体打开,大概就会需要您的对象。如果是这样,只需将它们存储为表单的属性即可。

答案 3 :(得分:0)

单身人士很糟糕,是吗? ;)

或者,更重要的是,全球数据(尤其是可变的全球数据)通常不是一件好事。它使类很难测试和调试。小范围是很好的范围。

一种选择是查看IoC容器库(也称为DI框架)。

IoC =控制反转 DI =依赖注入(或反转)

基本上,您可以在需要访问全局数据的类上设置构造函数,并添加“单例”类型的参数 - 除了它不是单例,只是普通旧对象(或接口)。然后告诉Container您的“全局数据”类具有较长的生命周期,并使用Container创建其他对象。您将不再使用“new”关键字了。好处是Container将为您自动连接所有内容,创建一个且只有一个全局类实例并将其注入所有其他构造对象。

这是.NET的库/框架的(不完整)列表:

IoC Container Benchmark

Ninject是另一个。我使用Unity,但这并不意味着它对你最好。 这是另一个清单: http://elegantcode.com/2009/01/07/ioc-libraries-compared/