2015-12-29 7 views
4

Я смотрел на пользовательские области в кинжале 2 (this и this - это те, которые я пытаюсь создать в моем коде), и есть одна вещь, которую я все еще не могу понять, я вижу, что вы можете создайте компонент с настраиваемой областью, а затем все предоставленные формы модули, содержащиеся в этом компоненте, будут либо той же областью, что и компонент (одиночный элемент в компоненте), либо без ограничений, который будет возвращать новые экземпляры каждый раз, когда вы их получите.Может ли кинжал 2 иметь объекты меньше срока службы?

Но, что я до сих пор не получаю, если у вас есть область пользователя, а затем у вас есть некоторые модули, привязанные к этой области, скажем, что ваш сетевой компонент привязан к ней, так что сетевые вызовы используйте текущую пользовательскую информацию, если вы выйдете из учетной записи пользователя (или войдите в систему пользователя) в середине жизненного цикла деятельности, изменит ли он ссылки на объекты, которые вы в настоящее время отмечали как @Inject? или какой-либо другой экземпляр, который вы получили при вызове .inject (this) в методе onCreate. Или вы должны называть инъекцию еще раз, чтобы снова отобразить ссылки?

Любая помощь по этому вопросу высоко ценится :)

ответ

3

ТЛ; Др Вы должны управлять все сами. Нет обновления, вам нужно воссоздать или, по крайней мере, перезагрузить часть своей деятельности.

Области предоставляют некоторую информацию о времени компиляции и помогают сохранить код «читаемым». Чтобы на самом деле поменять компоненты, вам придется делать сами. И да, вы должны создать свой дизайн вокруг этого, чтобы соответствующие компоненты были воссозданы соответственно.

Если пользователь регистрируется в/из, вам необходимо будет создать новый UserModule и компонент, ссылающийся на нового пользователя, предоставляя входные/выходные объекты. Это новый компонент, который вам нужно указать для всех будущих компонентов в зависимости от него.

@Inject аннотированные поля не будут обновляться автоматически, хотя вы можете просто ввести второй раз в одни и те же поля, объекты будут просто перезаписаны.

Во втором link you provided они фактически реализуют какую-то замену пользовательской информации. Это делается путем сохранения UserComponent в классе приложения.

+0

Спасибо за ответ, да, я считаю, что это должно быть что-то вроде этого, и это то, что я делаю в настоящее время, но я столкнулся с проблемой, что похоже, что вы не можете вводить 2 компонента, поэтому мне нужно иметь пользовательский компонент с пользователем-заглушкой, а затем снова вводить, когда есть реальный пользователь, потому что я не могу вставить свой «базовый компонент» плюс «пользовательский компонент», он пытается получить все инъекции из одного. –

+0

, так что означает '@ singleton' просто означает прояснить без какой-либо реальной цели? Благодарю. – hqt

+0

@hqt Любая область (включая Singleton) - это просто имя для разрешения зависимостей (если scope * a * зависит от * b *, то * b * не может зависеть от * a * (цикл)), называется ли это singleton или foo не имеет значения, сама область охватывает инкапсуляции зависимостей, которые «принадлежат» вместе, поскольку они (могут) зависят друг от друга и имеют аналогичную продолжительность жизни –

 Смежные вопросы

  • Нет связанных вопросов^_^