簡體   English   中英

在調用Application_Start()之后,Asp.Net MVC應用程序屬性始終為null

[英]Asp.Net MVC application Property is always null after Application_Start() is called

我的MVC應用程序具有以下global.asax。 每當請求開始時,我都會向ApplicationContext ()中的每個請求添加ApplicationContext (其中包含一些對象,例如Tokenfactory來處理身份驗證等Application_BeginRequest() 即使ApplicationContext是正確實例Application_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();

它可以正常工作! 這種行為的原因是什么?

Application_Start()僅觸發一次,而Application_BeginRequest()隨每個請求觸發。 在您的情況下, ApplicationContext不是static ,並且只能在Application_Start()初始化。 因此,它將僅在應用程序啟動時可用,對於其余請求將不可用。

您可以將其設置為static ,如果它不保留任何狀態,或者將其與收到的每個請求再次初始化。

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

它可以正常工作! 這種行為的原因是什么?

這肯定會起作用,因為每次實例化MvcApplication都會創建一個新的ApplicationContext實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM