我有一個MVC3應用程序,我添加了一些簡單的緩存變量作爲屬性。我在Application_Start
中添加我的數據,然後在控制器中稍後嘗試將HttpContext.ApplicationInstance
轉換回我的類型以訪問它。但是,該屬性始終爲空。這裏有一個例子:爲什麼我的HttpApplication實例變量爲空?
編輯以工作例
public interface IMyMvcApp
{
Hashtable Cache {get;set;}
}
public class MvcApplication: HttpApplication, IMyMvcApp
{
public Hashtable Cache
{
get { return Context.Cache["MyStuff"] as Hashtable; }
set { Context.Cache["MyStuff"] = value}
}
public void Application_Start()
{
Cache = new Hashtable();
Cache.Add("key", new object());
}
}
public class AController : Controller
{
protected override void OnActionExecuting(ActionExecutingContext context)
{
var myApp = context.HttpContext.ApplicationInstance as IMyMvcApp;
Assert.IsNotNull(myApp.Cache);
}
}
我記得現在,我的mvc應用程序的實現只是在get訪問器中打開緩存。 doh – scottm
使用緩存通常不是適用於長壽命對象的合適存儲位置。任何類上的靜態字段或屬性(如Application類)可能更準確。 – citykid