【问题标题】:Asp.Net MVC application Property is always null after Application_Start() is called调用 Application_Start() 后,Asp.Net MVC 应用程序属性始终为空
【发布时间】:2018-05-08 02:38:54
【问题描述】:

我的 MVC 应用程序有以下 global.asax。每次请求开始时,我都会在Application_BeginRequest() 中的每个请求中添加ApplicationContext(其中包含一些对象,例如用于处理身份验证的Tokenfactory 等)。尽管ApplicationContextApplication_Start() 中被正确实例化,但每次调用Application_BeginRequest() 时它都是空的。

public class MvcApplication : HttpApplication {

    /// <summary>
    /// Application context which can be accessed server wide. It contains Tokenfactory etc.
    /// </summary>
    public ApplicationContext ApplicationContext { get; private set; }

    /// <summary>
    /// Runs once when application starts.
    /// </summary>
    protected void Application_Start() {
        //STUFF...
        //........
        InitializeContext();
    }

    private void InitializeContext() {
        ApplicationContext = new ApplicationContext();
    }

    protected void Application_BeginRequest() {
        Context.Items.Add("TokenFactory", ApplicationContext.tokenFactory);
    }
}

额外信息:

如果我将此行更改为

public ApplicationContext ApplicationContext { get; private set; }

这个➡(当然删除InitializeContext(); :P)

public ApplicationContext ApplicationContext { get; } = new ApplicationContext();

它没有问题!这种行为的原因是什么?

【问题讨论】:

    标签: c# asp.net global-asax


    【解决方案1】:

    Application_Start() 只触发一次,而Application_BeginRequest() 在每个请求中触发。在您的情况下,ApplicationContext 不是static,它只是在Application_Start() 中初始化。所以它只会在应用程序启动时可用,对于剩余的请求它将不可用。

    如果它没有保持任何状态,您可以将其设为static,或者在您收到的每个请求时再次对其进行初始化。

    public ApplicationContext ApplicationContext { get; } = new ApplicationContext();

    它没有问题!是什么原因 对于这种行为?

    这肯定会起作用,因为每次实例化 MvcApplication 时,都会创建一个新的 ApplicationContext 实例。

    【讨论】:

    • 我的印象是只有一个应用程序,似乎IIS创建了多个MvcApplication实例。 ApplicationContext 在第一个实例中正确初始化,但在其他实例中,它是 null
    • 没有清楚地得到你的评论,但如果你想一直只有一次,你可以去静态的。
    • 我认为您应该修复以下问题➡“这肯定会起作用,因为每次您访问该属性时,都会创建一个新的 ApplicationContext 实例。”每次实例化 MvcApplication
    猜你喜欢
    • 1970-01-01
    • 2015-07-09
    • 2017-10-29
    • 2010-11-01
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    相关资源
    最近更新 更多