如何创建全局变量,ASP.NET,全局asax

时间:2009-11-25 15:11:34

标签: c# .net asp.net global-asax

我有一些数据层类,几乎在整个网站上都经常使用。

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

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

我该怎么办?
是通过使用global.asax来完成的 我可以在global.asax

中创建我的对象

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

6 个答案:

答案 0 :(得分:9)

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

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

您还可以使用Application State甚至ASP.NET Cache,因为这些会话在所有会话中共享。

但是,如果我遇到这种情况,我会使用像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

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

答案 1 :(得分:3)

我建议你为此目的使用application state

答案 2 :(得分: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页面中重复相同的字符串之后给你一层抽象。

答案 3 :(得分:0)

ASP.NET Application State Overview”包含一个可用于在所有用户之间存储数据的对象,类似于Session对象,可以存储各种键值对。

答案 4 :(得分: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”成员也会使您的值在编译时不可变,并且在执行应用程序期间不可能修改它们。

答案 5 :(得分:0)

此外,我强烈建议您阅读精彩的文章https://lowleveldesign.org/2011/07/20/global-asax-in-asp-net/,以了解global.asax中Global类的工作原理。