0

使用 ASP.NET MVC3。

我要做的是使用应用程序状态变量初始化控制器字段/属性。

即在我的 Application_Start() 方法中

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

通过控制器方法访问它,例如

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"]);
}

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

提前致谢

-马尔辛

4

2 回答 2

1

HttpContext尚未在控制器构造函数中初始化并且为空。

如果您需要访问任何与 HttpContext 相关的内容,最多可以在Initialize方法中尽早完成:

public class HomeController: Controller
{
    private Stats stats;

    protected override void Initialize(RequestContext requestContext)
    {
        base.Initialize(requestContext);
        stats = (Stats)(HttpContext.Application["stats"]);
    }
}
于 2012-07-26T07:17:45.373 回答
0

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

private Stats stats;
public HomeController()
{
    stats= (Stats)(System.Web.HttpContext.Current.Application["stats"]);
}
于 2012-07-26T07:28:05.790 回答