2011-11-29 55 views
3

我对ASP.NET MVC比较新,所以我对这个有点麻烦。当应用程序启动时,我将属性设置为某个值。但是,当我尝试访问控制器中的此属性(使用this)时,该属性始终为空。从控制器访问它时,我的MvcApplication的属性为空

这是我误解的东西吗?

这里的简化版本的代码:

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

回答

5

有整个应用生命周期,但Application_Start创建多个HttpApplication实例只调用一次,当应用程序初始化第一。

更多信息请参阅本:http://msdn.microsoft.com/en-us/library/ms178473%28VS.80%29.aspx

我不知道你正试图在这里存放了什么(扩展?),但如果全球所有的用户,那么你可以使用一个静态属性,否则它存储在某处其他。

+0

正是我寻找的答案。谢谢! –

1

最后回答(但对于任何需要帮助的人)。

我也有这个问题。

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

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