Я пытаюсь создать модуль для поддержки аутентификации и управления пользователями в моем приложении (C#). этот модуль должен быть доставлен как часть DLL, предназначенного для работы в инфраструктуре, так что другие разработчики должны использовать его как компонент «третьей стороны». Главное здесь, что я не отвечаю за пользовательский интерфейс (который зависит от разрешений пользователя и сеанса), но только обеспечивает инфраструктуру для работы.кэширование и обновление свойств
Итак, я создал одноэлементный класс UserManager
, который позволяет такие действия, как Вход, Выход из системы и еще несколько функций и событий. Класс UserManager содержит свойство с именем CurrentUser
, которое имеет тип ApplicationUser
.
ApplicationUser
- это класс, который создается с данными пользователя (такими как полное имя, имя пользователя и тому подобное), а также предоставляет функцию IsEligibleFor(Permission)
.
Я хочу, чтобы пользователи получили экземпляр UserManager
и обменивались данными с текущим зарегистрированным пользователем через свойство CurrentUser
. Идеальным способом было бы свести на нет CurrentUser
при вызове операции выхода и создать новый ApplicationUser
каждый раз, когда пользователь войдет в систему. но это проблематично, потому что пользователь этих классов может кэшировать экземпляр ApplicationUser
и не замечать изменения.
Вот почему я подумываю о переходе к решению, где у меня есть флаг в объекте ApplicationUser, который указывает, остается ли объект действительным или нет. но это требует проверки действительности в каждом методе ApplicationUser, который мне не нравится.
Мне было интересно, есть ли какое-то решение или шаблон, который я здесь отсутствует.
Это «решение» было принято (и я действительно позволю пользователю подписаться на событие логотипа), но я все еще ищу решение, которое возьмет на себя ответственность за повторное кэширование от пользователя. с вашим решением я установлю CurrentUser равным null, но пользователь все равно сможет общаться со старой копией, не зная, что он старый. –
Не несет ли ответственность слушателей кэширование пользователя? Вы можете отправить нового пользователя вместе с событием, и слушатели в основном просто заменят свой кешированный пользовательский объект объектом, отправленным с событием. «* с вашим решением я установлю CurrentUser равным нулю, но пользователь все равно сможет взаимодействовать со старой копией *» - нет, они бы не так, как вы бы заменили «старую» копию новой. Возможно, я неправильно понимаю, какова ваша текущая настройка, может быть лучше, если вы обновите свой вопрос с помощью рабочего примера. – James
Я хочу, чтобы пользователь использовал этот класс, не беспокоясь о проблемах с кэшированием. Я хочу убедиться, что нет механизма, которого я не вижу. Спасибо :) –