C# .Net应用程序范围的变量

C# .Net应用程序范围的变量,c#,.net,singleton,C#,.net,Singleton,我对.Net相当陌生。。。我有几个查询将在应用程序加载时执行。我希望这些查询将数据存储在整个应用程序都可以访问的对象(数据集?)中。我应该使用单例类吗?我的应用程序中的用户控件如何引用主应用程序代码中的公共变量 我想我还没有找到一个关于如何/在何处存储应用程序变量以及在需要填充ListBox、DataGridView等时如何引用它们的好资源 作为我最熟悉使用Flex Builder 3进行开发的背景,很抱歉提出了一个模糊的问题。。。我在查找主题上的好引用时遇到问题(不仅仅是填充控件,而是在应用程

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

我想我还没有找到一个关于如何/在何处存储应用程序变量以及在需要填充ListBox、DataGridView等时如何引用它们的好资源

作为我最熟悉使用Flex Builder 3进行开发的背景,很抱歉提出了一个模糊的问题。。。我在查找主题上的好引用时遇到问题(不仅仅是填充控件,而是在应用程序级别存储数据并从应用程序中的任何位置引用数据)


编辑:这是用于使用C#

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

详情如下:

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

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


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

这里不需要单例,但如果确实需要延迟初始化和线程安全性,您可能希望采用这种方法。

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


编辑:考虑到您不想多次查询信息,您可以使用单例来访问和缓存数据。

只要应用程序的主窗体处于打开状态,就可能需要您的对象。如果是这样,只需将它们存储为表单的属性。

单例是不好的,m'kay?;)

或者,更重要的是,全局数据(特别是可变全局数据)通常不是一件好事。这使得类很难测试和调试。小范围就是好范围

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

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

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

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

Ninject是另一个。我使用统一,但这并不意味着它对你是最好的。 下面是另一个列表:

您要存储和访问多少数据?该数据多久更改一次?我假设这是一个桌面应用程序,对吗?是的,是一个桌面应用程序。在初始加载之后,它不会经常更改,我不想多次查询数据,很抱歉没有澄清。。。这是针对windows窗体应用程序的,这是一个很好的解决方案,除非数据必须在实例之间保存我如何从子控件引用它?应用程序。*?我不希望对控件进行编码,以便它们尝试访问父窗体的自定义成员。我认为最好是显式地将所需的引用/值传递给控件。