2015-06-23 2 views
1

Я использую на своем веб-сайте asp.net одноэлементный класс для информации о пользователях.Шаблон проектирования Singleton в веб-среде

Я хотел бы знать, если я разместил этот веб-сайт в сети, когда пользователи начнут логин, этот класс сохранит данные только одному пользователю.

Это мой класс:

public class User 
{ 
    private static User instance;   
    private User(){} 

    public static User Instance 
    { 
     get 
     { 
      if (instance == null) 
      { 
       instance = new User(); 
      } 
      return instance; 
     } 
    } 

    public Institute LoggedInstitute { get; set; } 
    public List<Institute> Institutes { get; set; } 
} 
+0

пожалуйста, поделитесь кодом, чтобы оценить, так что мы сможем ответить – Dalorzo

+0

'общественного класса пользователя { закрытого экземпляра статического пользователя; частного пользователя() {} открытый статический пользователь Instance { получить { если (экземпляр == NULL) { экземпляра = новый User(); } экземпляр возврата; } } \t \t общественный институт LoggedInstitute {get; задавать; } Публичный список Институты {get; задавать; } }} ' – abeppler

+0

Я попытался положить слово wrap .. но не сработал ... :( – abeppler

ответ

0

, когда пользователи начинают войти в этот этот класс будет хранить данные в только одному пользователю.

В вашем приложении будет только один экземпляр пользователя.

Хранение каждой пользовательской информации в Singleton - очень очень плохая идея для веб-приложения. Зачем?

Несколько пользователей запрашивают ваше веб-приложение, и все они будут использовать один и тот же экземпляр пользователя. Я гарантирую, что это не то, что вы хотите.

В идеале, в веб-приложение, вы хотите создать Principal объект, и хранить его в HttpContext.

FYI: Мы используем Singleton в веб-приложении для хранения информации (в основном никогда не меняющейся), которая используется в начале приложения до конца.

+0

Спасибо, человек, я попробую! – abeppler

+0

Посмотрите на [этот ответ] (http://stackoverflow.com/a/25649625/296861) о том, как создать Принципала объект. – Win

0

Там будет только несколько экземпляров вашего класса, если ваше приложение используется в сценарии веб-фермы. Обратитесь к этой теме: Are static class instances unique to a request or a server in ASP.NET?

+0

Итак, просто для подтверждения, если я запишу в приложение, используя мои учетные данные, а после меня другой пользователь регистрируется в приложении, он получит мои пользовательские данные? – abeppler

+0

Я не понимаю, почему вы хотите использовать статический файл для хранения пользователя? Если вы хотите, чтобы эта информация была уникальной для каждой сессии, вы должен хранить эту информацию в сеансе. –

+0

Поскольку данные volumn size – abeppler

0

Статические поля в C# (и я считаю, во всех языках .NET), например, тот, которая используется для хранения одноплодного экземпляра вашего User класса, являются «уникальными» в пределах AppDomain.

Если и только если у вас несколько приложений AppDomains, будь то в одном процессе, в другом процессе или на другом компьютере (например, в веб-ферме), как указал Уильям в своем answer, у вас может быть несколько экземпляров.

Scope of static variables in ASP.NET sites

In .Net is the 'Staticness' of a public static variable limited to an AppDomain or the whole process?

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