C# 调用应用程序_Start()后,Asp.Net MVC应用程序属性始终为空
我的MVC应用程序有以下global.asax。每次请求启动时,我都会将C# 调用应用程序_Start()后,Asp.Net MVC应用程序属性始终为空,c#,asp.net,global-asax,C#,Asp.net,Global Asax,我的MVC应用程序有以下global.asax。每次请求启动时,我都会将ApplicationContext添加到Application\u BeginRequest()中的每个请求中(其中包含一些对象,如用于处理身份验证的Tokenfactory等)。即使在Application\u Start()中正确实例化了ApplicationContext,但每次调用Application\u BeginRequest()时,它都是空的 public class MvcApplication : Ht
ApplicationContext
添加到Application\u BeginRequest()
中的每个请求中(其中包含一些对象,如用于处理身份验证的Tokenfactory等)。即使在Application\u Start()
中正确实例化了ApplicationContext
,但每次调用Application\u 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);
}
}
这个➡ (当然还要删除InitializeContext();
:P)
它工作没有问题!此行为的原因是什么?应用程序\u Start()
仅触发一次,其中as应用程序\u BeginRequest()
随每个请求一起触发。在您的情况下,ApplicationContext
不是static
,它只是在Application\u Start()
中初始化。因此,它将仅在应用程序启动时可用,对于其余的请求,它将不可用
如果它没有持久化任何状态,您可以将其设置为静态
,或者在收到每个请求时再次初始化它
public ApplicationContext ApplicationContext{get;}=new
ApplicationContext()代码>
它工作没有问题!原因是什么
为了这种行为
这肯定会起作用,因为每次实例化mvcapapplication
时,都会创建一个新的ApplicationContext
实例。Application\u Start()
只触发一次,其中asApplication\u BeginRequest()
随每个请求一起触发。在您的情况下,ApplicationContext
不是static
,它只是在Application\u Start()
中初始化。因此,它将仅在应用程序启动时可用,对于其余的请求,它将不可用
如果它没有持久化任何状态,您可以将其设置为静态
,或者在收到每个请求时再次初始化它
public ApplicationContext ApplicationContext{get;}=new
ApplicationContext()代码>
它工作没有问题!原因是什么
为了这种行为
这肯定会起作用,因为每次实例化mvcapapplication
时,都会创建一个新的ApplicationContext
实例。我的印象是只有一个应用程序,似乎IIS会创建多个mvcapapplication实例ApplicationContext
对于第一个实例是正确初始化的,但是对于其他实例,它是null
无法清楚地获取您的注释,但是如果您只想始终只安装一次,您可以选择静态。我想您应该修复以下问题➡“这肯定会起作用,因为每次访问该属性时,都会创建一个新的ApplicationContext实例。”每当MVCAPApplication
实例化时,我都觉得只有一个应用程序,似乎IIS会创建多个MVCAPApplication实例ApplicationContext
对于第一个实例是正确初始化的,但是对于其他实例,它是null
无法清楚地获取您的注释,但是如果您只想始终只安装一次,您可以选择静态。我想您应该修复以下问题➡“这肯定会起作用,因为每次访问属性时,都会创建一个新的ApplicationContext实例。”每次实例化MVCAPApplication
public ApplicationContext ApplicationContext { get; private set; }
public ApplicationContext ApplicationContext { get; } = new ApplicationContext();