2011-06-01 144 views
3

是否有可能在Application_Start上创建可用于所有控制器的类实例?在Application_Start上创建一个类实例

我希望能够创造出例如:

var globalHelper = new LoadsStuff(); 

,然后在我的操作方法:

globalHelper.GetInfoFor("key"); 

我的助手类加载一个相当大的XML文件,内存和I会喜欢只做一次。

+0

是否使用MVC?如果你是,你应该在你的标签中注明。 – DOK 2011-06-01 13:41:28

+0

我做了,但一个管理员更改标签为asp.net,我只是修复:) – 2011-06-01 13:42:13

+1

这听起来像你想要使用依赖注入可疑。看看ninject mvc http://weblogs.asp.net/shijuvarghese/archive/2010/04/30/dependency-injection-in-nerddinner-app-using-ninject.aspx – 2011-06-01 13:44:09

回答

3

使用应用程序变量:

Application["GlobalHelper"] = new LoadsStuff(); 

((LoadsStuff) Application["GlobalHelper"]).GetInfoFor("key"); 

参考:

ASP.NET Application State Overview

+0

应用程序在控制器中不可用,你确定这是正确的吗? – 2011-06-01 13:48:33

+0

@BjarkiHeiðar:试试'HttpContext.Current.Application'。 – 2011-06-01 13:57:58

+1

它是HttpContext.Application,谢谢。 – 2011-06-01 14:01:39

1

如果您将XML文件Application level object置于Application_Start事件中怎么办?

void Application_Start(object sender, EventArgs e) 
{ 
    Application[""] = // 
} 
0

是的,我认为你可以。 我没有试过,但类似:

ManagedWebSessionContext.Bind(HttpContext.Current, globalHelper)