静态字段在每个请求上重新初始化

时间:2013-11-29 08:45:11

标签: c# static .net-4.5 asp.net-mvc-5

我在asp.net mvc 5应用程序(测试应用程序,非常基本)中有这种非常奇怪的行为。

 public class MvcConventions
{
    static Dictionary<string,MvcConventions> profiles=new Dictionary<string, MvcConventions>(1);

   public static MvcConventions CreateProfile(string profile)
    {
        if (!profiles.ContainsKey(profile))
        {
            profiles[profile]=new MvcConventions();
        }
        return profiles[profile];
    }

    public static MvcConventions SingleProfile
    {
        get
        {
            return CreateProfile("default");
        }
    }

        /* removed ohter stuff */

}

我在global.asax.cs中使用SingleProfile属性一次,这会创建一个配置文件。但是在请求中, profiles 字段似乎已重新初始化,因此它变为空。

我正在使用IIS express在VS中运行应用程序。我在不同的解决方案中移动应用程序后,此行为开始。我不认为它有什么可做的,但奇怪的是,它在移动它之前应该有效。

为什么会出现这种情况?这就像包含类的程序集在应用程序启动时加载一次,然后丢弃然后再次加载到另一个请求中。简而言之, static 不再是静态

编辑:我在个人资料上设置了一个断点,它会点击两次:一次是global.asax.cs,另一次是第一次请求

1 个答案:

答案 0 :(得分:0)

好的,我解决了它:我必须手动删除每个项目的/ bin文件夹中的所有内容,然后重新加载解决方案。无论出于何种原因,它似乎都使用了旧的和新的程序集,可能它使用了一个用于global.asax而另一个用于请求。