从控制器访问时,我的MvcApplication的属性为null

时间:2011-11-29 02:49:38

标签: c# asp.net asp.net-mvc

我对ASP.NET MVC比较陌生,所以我对这个问题有点麻烦。当应用程序启动时,我将属性设置为某个值。然而,当我尝试在控制器中访问此属性时(使用this),该属性始终为null。

这是我误解的事吗?

这是代码的简化版本:

public class MvcApplication : System.Web.HttpApplication
{
    internal ExtensionManager Extensions { get; private set; }

    protected void Application_Start()
    {
        this.Extensions = new ExtensionManager();
    }
}

public ActionResult ListExtension()
{
    var app = HttpContext.ApplicationInstance as MvcApplication;
    return View(app.Extensions.InstalledExtensions);
}

2 个答案:

答案 0 :(得分:5)

在整个应用程序生命周期中创建了多个HttpApplication实例,但Application_Start仅在应用程序首次初始化时调用一次。

有关详细信息,请参阅此处:http://msdn.microsoft.com/en-us/library/ms178473%28VS.80%29.aspx

我不知道你要在这里存储什么(扩展名?)但是如果它对所有用户都是全局的,那么你可以使用静态属性,否则将它存储在其他地方。

答案 1 :(得分:1)

迟到的答案(但对于需要帮助的人)。

我也有这个问题。

我认为您可以使用Application["myKey"]数组来设置一些值。当然它们不是实例属性,但您可以设置依赖注入容器(例如unity,在其代码示例中推荐此选项),然后使用Application["myKey"]从控制器访问它。

  

您应该在应用程序启动期间仅设置静态数据。不要设置   任何实例数据,因为它只能用于第一个   创建的HttpApplication类的实例。