我有一些数据层类,几乎在整个网站上都经常使用。
我之前正在开发一个Windows应用程序,我曾经在模块(vb.net)中创建它的对象,但现在我在C#和ASP.NET上工作。
现在我需要做同样的事情,这样我就不需要在每一页上多次创建相同的对象 我想使用像使用全局变量之类的东西。
我该怎么办?
是通过使用global.asax来完成的
我可以在global.asax
我是asp.net的新手,所以尽量给出语法和解释。
答案 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类的工作原理。