2013-11-29 6 views
0

У меня очень странное поведение в приложении asp.net mvc 5 (тестовое приложение, очень простое).Статическое поле получает reinitialized по каждому запросу

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 */ 

} 

Я использую свойство SingleProfile один раз в global.asax.cs, который создает профиль. Но затем внутри запроса профили поле, похоже, повторно инициализировано, поэтому оно становится пустым.

Я запускаю приложение только в VS, используя IIS express. Такое поведение началось после того, как я переместил приложение в другом решении. Я не думаю, что это что-то делать, но странно, что он работал так, как нужно, прежде чем перемещать его.

Почему такое поведение происходит? Это похоже на то, что сборка, содержащая класс, загружается один раз, когда приложение запускается, а затем отбрасывается, а затем снова загружается в другой запрос. Проще говоря, статические больше не статические.

Edit: Я поставил точку останова на профилей и она попадает дважды: один раз для Global.asax.cs и другой для первого запроса

ответ

0

Хорошо, я решил: я должен был вручную удалить все из папки/bin для каждого проекта, затем перезагрузите решение. По какой-то причине, похоже, она использовала как старую, так и новую сборку и, вероятно, использовала ее для global.asax, а другая для запроса.

Смежные вопросы