Добавление пользовательского класса ко всем докладчикам
-
01-10-2019 - |
Вопрос
Я смутно понимаю, что такое ДЖИН, но могу ли я использовать его для инъекционных выступлений и т.д.
Я пытаюсь внедрить самодельный класс "User" во всех моих докладчиков, чтобы получить текущего вошедшего в систему пользователя.
Я добавил @Inject в конструктор моего класса User и добавил User в свой модуль GIN...но в остальном я совершенно растерян.Должен ли я привязать его к моему app presenter (пробовал это, но получаю сообщение об ошибке, поскольку User не расширяет мой AppPresenter)?Как одиночка?Является ли это вообще правильным способом передачи этих данных?
Я ненавижу публиковать это здесь (не ищу бесплатную домашнюю работу), но я не могу найти достойный учебник / пример по этому вопросу где-либо еще.
Заранее большое спасибо.
Решение
Я вижу две возможности:
- вводить с использованием источника, являющегося @Обеспечивает способ или Поставщик услуг.Однако проблема заключается в том, как передать текущего вошедшего в систему пользователя этим методам, поскольку глобальное состояние - это no-no.Возможным решением было бы передать его через шину событий, но на данный момент кажется, что это как бы сводит на нет весь смысл DI (внедрение текущего вошедшего в систему пользователя, ИМХО, не входит в роль DI).
- обходит пользователя по шине событий.Создайте пользовательское событие, которое запускается при входе пользователя в систему / изменениях, и некоторые ведущие прослушивают это событие (в конце концов, не все ведущие должны знать текущего пользователя).
Я предпочитаю и использую второй подход - хотя DI потрясающий, использовать его так, как вы описали, мне кажется несколько халтурным.Я настоятельно рекомендую ознакомиться с Документация Guice - По сути, Gin - это графический интерфейс, прекрасно адаптированный для работы с GWT, так что суть та же.Для получения некоторых других указаний, как эффективно использовать DI и, в целом, писать тестируемый код, я настоятельно рекомендую Блог Миско Хевери и тот руководство по написанию тестируемого кода он разместил там (используется внутри Google).