应用程序变量在Controller构造函数问题中初始化

时间:2012-07-26 06:43:40

标签: asp.net asp.net-mvc

使用ASP.NET MVC3。

我要做的是使用Application状态变量初始化Controller字段/属性。

即。在我的Application_Start()方法中我有

Application["stats"] = new Stats(); //this is fine

通过Controller方法访问它,例如

public ActionResult Index()
{
  return View(HttpContext.Application["stats"]); //this is also fine
}

也可以。

//blows up with a 'Object reference not set to an object' error.
private Stats stats;
public HomeController()
{
    stats= (Stats)(HttpContext.Application["stats"]);
}

任何人都能解释我无法理解的内容+如何解决问题?如果有更好的方法,请告诉我(如果你想知道,我不是要加载应用程序配置或任何东西;只是为了保持网站状态的实时统计数据)

提前致谢

-Marcin

2 个答案:

答案 0 :(得分:1)

HttpContext尚未在控制器构造函数内初始化,并且为null。

如果你需要访问任何与HttpContext相关的东西,这可以在Initialize方法的早期完成:

public class HomeController: Controller
{
    private Stats stats;

    protected override void Initialize(RequestContext requestContext)
    {
        base.Initialize(requestContext);
        stats = (Stats)(HttpContext.Application["stats"]);
    }
}

答案 1 :(得分:0)

你问题中的HttpContext是控制器上的属性,正如Darin所说,尚未初始化。但是你可以使用它:

private Stats stats;
public HomeController()
{
    stats= (Stats)(System.Web.HttpContext.Current.Application["stats"]);
}