[英]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.