Итак, что я пытаюсь сделать, это убедиться, что у меня есть только один экземпляр для области в Dagger2.Обеспечение только одного экземпляра для области в Dagger2
По умолчанию Singleton scope уже работает именно так. Независимо от того, сколько мест вы вводите один и тот же объект, давайте назовем его GlobalInstance
, метод GlobalInstance provideGlobalInstance()
, который построит его, будет называться один раз и только один раз.
С другой стороны, если я определить настраиваемую область, например @SessionScope
и внутри некоторого SessionModule
Я делаю метод User provideUser()
, что метод (и, как следствие, new User()
конструктор) будем называть столько раз, сколько я инъекционного User
. Независимо от того, я использую один и тот же экземпляр модуля каждый раз, User provideUser()
вызывается для каждого @Inject User mUser
. У меня есть в моем коде, что приводит к нескольким экземплярам, а не к одному одиночному одиночному ограничению.
Есть ли четкий способ достичь этого, используя обычный кинжал api. Один из способов сделать это - иметь ленивые геттеры внутри класса модуля, но это не очень чистый способ сделать это.
Вы должны использовать один и тот же компонент, чтобы убедиться, что вы впрыскивать экземпляр, который принадлежит к данному компоненту – EpicPandaForce
Итак, вместо того, сохраняющиеся модуль, я должен упорствовать как-то целая составляющая, не так ли? Какова наилучшая практика для этого? Какой-то статический/глобальный кеш компонентов? – SadClown
Да, обычно да. Я видел «статический» для области приложения @Singleton на уровне приложения и «onRetainCustomNonConfigurationInstance()» для Activity. 'Map' иначе, где они хранят компонент к некоторому ключу на карте –
EpicPandaForce