0

ASP.NETMVC3を使用します。

私がやろうとしているのは、アプリケーションの状態変数を使用してコントローラーのフィールド/プロパティを初期化することです。

つまり、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まだコントローラーコンストラクター内で初期化されておらず、nullです。

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はコントローラーのプロパティであり、Darinが言ったように、それはまだ初期化されていません。ただし、これは使用できます。

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