Size: a a a

2020 January 14

AK

Alexey Kalyaganov in Dagger 2
Dmitry
Объясните пожалуйста в чем разница между constructor injection и проперти injection. В конструктор не надо компонент создавать?
Инжект в проперти это костыль на случай если не доступен инжект через конструктор. Компонент нужен везде
источник

DN

Danil Novoselov in Dagger 2
Привет!! У вас бывало такое, что даггеровский компонент сгенерился, но импортировать его почему-то не получается??

Пытаюсь заимпортить его в java-module. В нем же и написал интерфейс компоненты
источник

М

Михаил in Dagger 2
Danil Novoselov
Привет!! У вас бывало такое, что даггеровский компонент сгенерился, но импортировать его почему-то не получается??

Пытаюсь заимпортить его в java-module. В нем же и написал интерфейс компоненты
Он же package private, и не должно получиться
источник

DN

Danil Novoselov in Dagger 2
Не. Какая-то фигня с модулями. Перевел на android-модуль, и все стало четко
источник
2020 January 15

VP

Valery Ponomarenko in Dagger 2
попробуй добавить в build.gradle этого модуля
sourceSets.main.java.srcDirs = ['build/generated/source/kapt/main','src/main/java']
источник
2020 January 17

AA

Artur Antonevich in Dagger 2
Привет

   @Component.Builder
   interface Builder {

       @BindsInstance
       fun url(url: String): Builder

       @BindsInstance
       fun domain(domain: String): Builder

       @BindsInstance
       fun context(context: Context): Builder

       fun build(): AppComponent
   }

такую штуку(мультипа байндинг по стринге) разрулить? @Named как я понимаю тут не работает
источник

IG

Ilya Gulya in Dagger 2
Artur Antonevich
Привет

   @Component.Builder
   interface Builder {

       @BindsInstance
       fun url(url: String): Builder

       @BindsInstance
       fun domain(domain: String): Builder

       @BindsInstance
       fun context(context: Context): Builder

       fun build(): AppComponent
   }

такую штуку(мультипа байндинг по стринге) разрулить? @Named как я понимаю тут не работает
Работает
источник
2020 January 20

AS

Alexander Sitnikov in Dagger 2
Друзья, добрый день. Ситуация такова - в одном модуле есть класс с inject конструктором - назовём его Foo. В другом модуле есть компонент Bar со скоупом @Bar. Вопрос - как добавить скоуп @Bar классу Foo в компоненте Bar, не добавляя @Bar в класс Foo (он там не доступен)?
источник

IG

Ilya Gulya in Dagger 2
Alexander Sitnikov
Друзья, добрый день. Ситуация такова - в одном модуле есть класс с inject конструктором - назовём его Foo. В другом модуле есть компонент Bar со скоупом @Bar. Вопрос - как добавить скоуп @Bar классу Foo в компоненте Bar, не добавляя @Bar в класс Foo (он там не доступен)?
Убрать @Inject конструктор и провайдить в каком-то модуле с нужным скоупом
источник

IG

Ilya Gulya in Dagger 2
Можно оставить @inejct конструктор а в модуле аргументом метода сделать Provider<Foo>
источник

AS

Alexander Sitnikov in Dagger 2
Ilya Gulya
Можно оставить @inejct конструктор а в модуле аргументом метода сделать Provider<Foo>
Я тоже так поначалу подумал, но в этом случае даггер генерит DelegateFactory, который делегирует сам на себя, то есть в конце концов получится рекурсия
источник

IG

Ilya Gulya in Dagger 2
Alexander Sitnikov
Я тоже так поначалу подумал, но в этом случае даггер генерит DelegateFactory, который делегирует сам на себя, то есть в конце концов получится рекурсия
Рекурсия получится только если у вас есть циклические зависимости
источник

IG

Ilya Gulya in Dagger 2
Либо вы не полностью описали задачу. Из того что вы описали никакой рекурсии не следует.
источник

AS

Alexander Sitnikov in Dagger 2
Имеем вот такой модуль:

@Module
object MyModule {
   @Provides
   @BarSingleton
   fun makeSingleton(provider: Provider<Int>): Int = provider.get()
}

Даггер генерит примерно такое (если убрать мишуру):

val intProvider = dagger.internal.DelegateFactory<Int>()
dagger.internal.DelegateFactory.setDelegate(
   intProvider,
   dagger.internal.DoubleCheck.provider(
       Provider{ MyModule.makeSingleton(intProvider) }
   )
)

Тогда  intProvider.get() кидает StackOverflowError
источник

AS

Alexander Sitnikov in Dagger 2
Вместо Int соответственно класс с inject конструктором
источник

AS

Alexander Sitnikov in Dagger 2
Тут видимо в самом деле придётся без inject конструктора ручками провайдить
источник

AK

Alexey Kalyaganov in Dagger 2
Подскажите, можно ли в билдер компонента передать зависимости чтобы даггер сам создал модули с этими зависимостями?
источник

IG

Ilya Gulya in Dagger 2
Alexey Kalyaganov
Подскажите, можно ли в билдер компонента передать зависимости чтобы даггер сам создал модули с этими зависимостями?
Читай про @Component.Builder и @Subcomponent.Builder
источник

AK

Alexey Kalyaganov in Dagger 2
Спасибо, но да или нет меня бы устроило)
источник

SV

Sviat Volkov in Dagger 2
Alexey Kalyaganov
Спасибо, но да или нет меня бы устроило)
да, можно в билдер передать зависимости которые будут использоваться в компоненте и нет, модули даггер создавать не будет. поэтому надо почитать про аннотации )
источник