Добавление класса пользователя для всех докладчиков - PullRequest
3 голосов
/ 29 июня 2010

У меня есть смутное понимание GIN, но оно работает для инъекций докладчиков и т. Д.

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

Я добавил @Inject в конструктор моего класса User и добавил User в мой модуль GIN ... но кроме этого я полностью потерян. Должен ли я связать это с моим ведущим приложения (пробовал это, но я получаю ошибку, так как Пользователь не расширяет мой AppPresenter)? Как синглтон? Это даже правильный способ передать эти данные?

Я ненавижу публиковать это здесь (не ищу бесплатную домашнюю работу), но я не могу найти достойное руководство / пример по этому вопросу где-либо еще.

Большое спасибо заранее.

1 Ответ

2 голосов
/ 29 июня 2010

Я вижу две возможности:

  • Внедрить, используя источник @ Предоставляет метод или Поставщик . Однако проблема заключается в том, как передать текущего зарегистрированного пользователя этим методам, поскольку глобальное состояние - нет-нет. Возможным решением было бы передать его через шину событий, но на данный момент кажется, что это своего рода побеждает весь смысл DI (внедрение текущего зарегистрированного пользователя ИМХО не является ролью DI).
  • передать пользователя через шину событий. Создайте пользовательское событие, которое запускается, когда пользователь входит в систему / изменяется, и некоторые докладчики прослушивают это событие (в конце концов, не все докладчики должны знать текущего пользователя).

Я предпочитаю и использую второй подход - хотя DI великолепен, использование его так, как вы описали, кажется мне немного хакерским. Я настоятельно рекомендую ознакомиться с документацией Guice - Gin - это, по сути, Guice, прекрасно работающий с GWT, поэтому ядро ​​остается тем же. Для некоторых других советов, как эффективно использовать DI и вообще писать тестируемый код, я настоятельно рекомендую блог Миско Хевери и руководство по написанию тестируемого кода , который он там поместил (использовался для внутреннего использования) от Google).

...