Лучший подход для внедрения зависимости (DI) - PullRequest
3 голосов
/ 07 декабря 2011

Я разрабатываю настольное приложение в WPF, которое использует веб-сервис для входа и получения информации о лицензии. Это означает, что пользователь входит в систему, и я создаю объект на стороне клиента (в моем настольном приложении) с лицензированием и датой входа и т. Д.

Я использую StructureMap и хочу передать мою реализацию IMyUser в мой конструктор ViewModels (конструктор DI). Мой вопрос заключается в следующем: где я должен поместить мою инициализацию моей структурной карты, если я должен передать мою реализацию IMyUser в конструктор?

Я думаю, что после того, как я войду в систему и создаю IMyUserObject, я могу настроить StructureMap и передать ему экземпляр моего объекта пользователя. Это будет несколько «поздно» в моем приложении (обычно я помещаю его в класс приложения, поэтому его запуск выполняется первым делом в моем приложении).

Если это неправильный способ использования IMyUser и DI, пожалуйста, советуйте, также очень приветствуются альтернативные решения.

1 Ответ

4 голосов
/ 07 декабря 2011

Поскольку это вопрос об авторизации, я думаю, что он будет намного лучше обработан пользовательской реализацией IPrincipal .

Когда приложение запускается, назначьте реализацию потоку .CurrentPrincipal .Этот начальный экземпляр не должен авторизовать пользователя.

Когда пользователь вошел в систему и получил информацию о лицензии, замените или обновите Thread.CurrentPrincipal, чтобы разрешить пользователю использовать приложение.

Этопример шаблона Ambient Context .Вам не нужно вовлекать StructureMap в это взаимодействие.

...