Хранение информации для входа в приложение Windows - PullRequest
2 голосов
/ 16 февраля 2009

В веб-приложениях информация для входа пользователя обычно хранится в сеансе, но как насчет приложений Windows? Правильно ли использовать синглтон? Должен ли я просто использовать статическое свойство?

Допустим, я храню информацию для входа в статическое свойство ApplicationController. LoggedInUser. Когда пользователь успешно входит в систему, это свойство устанавливается. Перед успешным входом в систему LoggedInUser возвращает ноль. Затем при вызове примера OrdersService из моего класса OrderListPresenter я использую LoggedInUser в качестве параметра.

var service = new OrdersService();
var orderCollection = service.GetOrdersByUserID(
    ApplicationController.LoggedInUser.ID);

Хорошо, это работает, но также затрудняет написание модульных тестов. Мне не нравится работать с одиночными / статическими членами из моих модульных тестов.

Может быть, я мог бы добавить ApplicationController в каждый класс, к которому требуется доступ вошедшему в систему пользователю? Любые другие идеи?

Какой, по вашему мнению, лучший способ справиться с этим?

Ответы [ 3 ]

2 голосов
/ 16 февраля 2009

Я хотел бы создать объект CurrentContext, который содержит поле CurrentUser, и передать его всем моим докладчикам.

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

1 голос
/ 17 февраля 2009

В зависимости от того, что вы хотите сделать с идентификатором пользователя, рассмотрите возможность помещения его в System.Threading.Thread.CurrentPrincipal. Если ваше приложение имеет разрешение SecurityPermissionFlag.ControlPrincipal, тогда просто установите CurrentPrincipal, если он у вас есть. Также обратите внимание, что System.Environment.UserName имеет зарегистрированную идентификационную информацию пользователя Windows.

Всегда есть необходимость развернуть свой собственный тип, когда встроенный тип уже существует и делает то, что (или близко к тому), что вы хотите.

1 голос
/ 16 февраля 2009

Инъекция - хороший ответ. Вы, вероятно, найдете другие вещи, полезные для добавления в ApplicationController, и это облегчает юнит-тестирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...