c# - 调用 Application_Start() 后,Asp.Net MVC 应用程序属性始终为空
问题描述
我的 MVC 应用程序有以下 global.asax。每次请求开始时,我ApplicationContext
都会在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
创建一个新的实例。
推荐阅读
- json - Flutter - Pass variable to another screen for URL GET JSON
- bash - How can we rearrange a table with bash?
- python - pandas: how to set the wrap in a dataframe
- c# - How to use increment and decrement operators for 'this' keyword?
- json - Not able to read values through Graph API JSON response
- oracle-cloud-infrastructure - unable to get status code of oci-cli command
- sql - 纠正 sql 查询以在 2 分钟内排除会话
- javascript - ChartJS v2.9.4 - 通过图例隐藏数据集时可能出现的故障
- python - 为什么 keras 的准确性和损失在不同时期之间没有变化以及如何修复
- r - 在循环中添加 xts 对象