Итак, что я пытаюсь сделать, так это убедиться, что у меня есть только один экземпляр для каждой области в Dagger2.
Область Singleton по умолчанию уже работает таким образом. Независимо от того, в скольких местах вы внедряете один и тот же объект, давайте назовем его GlobalInstance
, метод GlobalInstance provideGlobalInstance()
, создающий его, будет вызываться один и только один раз.
С другой стороны, если я определяю пользовательскую область видимости, например @SessionScope
, и внутри некоторого SessionModule
создаю метод User provideUser()
, этот метод (и, соответственно, конструктор new User()
) будет вызываться столько раз, сколько я внедряю User
. Независимо от того, использую ли я один и тот же экземпляр модуля каждый раз, User provideUser()
вызывается для каждого @Inject User mUser
, который у меня есть в моем коде, в результате чего получается несколько экземпляров вместо одного «синглтона» с ограниченной областью действия.
Есть ли какой-то четкий способ добиться этого, используя обычный Dagger API. Один из способов сделать это - иметь ленивые геттеры внутри класса модуля, но это не очень чистый способ сделать это.
static
для области @Singleton на уровне приложения иonRetainCustomNonConfigurationInstance()
для действия.Map<Something, Object>
иначе где хранят компонент на какой-то ключ в карте - person EpicPandaForce   schedule 10.02.2017Map<Something, Object>
отлично, теперь ищем компоненты почти так же, как это делает Service Locator. Хотя, я не могу придумать лучшего подхода. Теперь, когда вопросу исполнилось 4 года, видели ли вы лучшую реализацию? - person Farid   schedule 18.03.2021