Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用应用程序_Start()后,Asp.Net MVC应用程序属性始终为空_C#_Asp.net_Global Asax - Fatal编程技术网

C# 调用应用程序_Start()后,Asp.Net MVC应用程序属性始终为空

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

我的MVC应用程序有以下global.asax。每次请求启动时,我都会将
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()
只触发一次,其中as
Application\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();