9

我有一些数据层类,几乎在整个站点上都非常频繁地使用。

我以前在一个 Windows 应用程序上工作,我曾经在模块(vb.net)中创建它的对象,但现在我在 C# 和 ASP.NET 上工作。

现在我需要做同样的事情,这样我就不需要在每个页面上多次创建相同的对象。
我想使用类似使用全局变量的东西。

我怎样才能做到这一点?
是通过使用 global.asax 完成的吗?
我可以在 global.asax 中创建我的对象吗

我是 asp.net 的新手,所以试着给出语法和解释。

4

6 回答 6

9

您实际上不需要使用 global.asax。您可以创建一个将您的对象公开为statics 的类。这可能是最简单的方法

public static class GlobalVariables {
    public static int GlobalCounter { get; set; }
}

您还可以使用应用程序状态甚至ASP.NET 缓存,因为它们在所有会话中共享。

但是,如果我在这种情况下,我会使用像Spring.NET这样的框架来管理我所有的 Sington 实例。

这是一个快速示例,说明如何使用 Spring.NET 获取类实例

//The context object holds references to all of your objects
//You can wrap this up in a helper method 
IApplicationContext ctx = ContextRegistry.GetContext();

//Get a global object from the context. The context knows about "MyGlobal"
//through a configuration file
var global = (MyClass)ctx.GetObject("MyGloblal");

//in a different page you can access the instance the same way
//as long as you have specified Singleton in your configuration

但实际上,这里更大的问题是为什么需要使用全局变量?我猜你并不真的需要它们,可能有一个更好的大局解决方案适合你。

于 2009-11-25T15:15:50.407 回答
3

我建议您为此目的使用应用程序状态。

于 2009-11-25T15:28:03.800 回答
1

我将跳过关于在 .NET 中使用全局变量的“应该”部分,并展示一些我现在正在使用的代码,这些代码将Global.asax用于一些“全局”变量。以下是该文件中的一些信息:

public class Global : System.Web.HttpApplication
{
        public enum InvestigationRole
        {
            Complainent,
            Respondent,
            Witness,
        }

        public static string Dog = "Boston Terrier";
}

因此,从 ASPX 页面中,您可以通过打开静态 Global 类来访问这些成员,如下所示:

protected void Page_Load(object sender, EventArgs e)
{
    string theDog = Global.Dog; 
    // copies "Boston Terrier" into the new string.

    Global.InvestigationRole thisRole = Global.InvestigationRole.Witness;
    // new instance of this enum.
}

不过买家要小心。在 .NET 世界中有更好的方法来处理“全局变量”的概念,但上述方法至少可以让您在所有 ASPX 页面中重复相同的字符串之上获得一层抽象。

于 2011-03-08T18:26:16.930 回答
0

ASP.NET 应用程序状态概述”包含一个可用于跨所有用户存储数据的对象,在能够存储各种键值对方面类似于 Session 对象。

于 2009-11-25T15:44:02.687 回答
0

使用公共结构。它们比类更有效,比枚举更灵活。

使用以下代码创建一个文件(最好在“/Classes”文件夹中):

public struct CreditCardReasonCodes
{
    public const int Accepted = 100;
    public const int InsufficientFunds = 204;
    public const int ExpiredCard = 202;
}

重要提示:不要放置任何命名空间,以便在您的 Web 应用程序中全局看到该结构。

要在您的代码中引用它,只需使用以下语法:

if (webServiceResult == CreditCardReasonCodes.Accepted)
{
    Console.WriteLine("Authorization approved.")
}

使用“const”成员还可以使您的值在编译时不可变,在应用程序执行期间不可能修改它们。

于 2014-09-19T23:10:10.273 回答
0

更重要的是,我强烈建议您阅读伟大的文章https://lowleveldesign.org/2011/07/20/global-asax-in-asp-net/以了解 global.asax 中的 Global 类是如何工作的。

于 2019-10-11T06:41:29.290 回答