Asp.Net MVC 应用程序 属性 在调用 Application_Start() 后始终为 null
Asp.Net MVC application Property is always null after Application_Start() is called
我的 MVC 应用程序有以下 global.asax。每次请求开始时,我都会向 Application_BeginRequest()
中的每个请求添加 ApplicationContext
(它有一些对象,例如 Tokenfactory 来处理身份验证等)。尽管 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();
It works without problems! What is the reason
for this behavior?
这肯定有效,因为每次实例化 MvcApplication
时,都会创建一个新的 ApplicationContext
实例。
我的 MVC 应用程序有以下 global.asax。每次请求开始时,我都会向 Application_BeginRequest()
中的每个请求添加 ApplicationContext
(它有一些对象,例如 Tokenfactory 来处理身份验证等)。尽管 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();
It works without problems! What is the reason for this behavior?
这肯定有效,因为每次实例化 MvcApplication
时,都会创建一个新的 ApplicationContext
实例。