Dagger 2 неправильно генерирует файл в Android Studio - PullRequest
0 голосов
/ 06 июня 2018

В моем приложении для Android у меня проблема с Dagger 2. У меня есть модуль, который содержит 3 зависимости, две из которых вводятся в активность, но не третья.

@Module
class MyNumberWriterModule(_type: Boolean) {
    private val type = _type
    @Provides
    @Singleton
    fun provideSimpleNumberWriter(): SimpleNumberWriter {
        return if (type) BelgianSimpleNumberWriter() else FrenchSimpleNumberWriter()
    }

    @Provides
    @Singleton
    fun provideIntegerNumberWriter(simpleNumberWriter: SimpleNumberWriter): IntWriter {
        return IntegerNumberWriter(simpleNumberWriter)
    }

    @Provides
    @Singleton
    fun provideDecimalNumberWriter(intWriter: IntWriter): NumberWriter {
        return DoubleNumberWriter(intWriter)
    }
}

А вот и компонент

@Singleton
@Component(modules = [(MyNumberWriterModule::class)])
internal interface MyNumberWriterComponent {
    fun inject(mainActivity: MainActivity)
    // fun inject(baseActivity: _BaseActivity)
}

Моя деятельность

class MainActivity : _BaseActivity() {
    @Inject
    lateinit var numberWriter: IntWriter

    @Inject
    lateinit var numberWriter2: NumberWriter

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        DaggerMyNumberWriterComponent.builder()
                .myNumberWriterModule(MyNumberWriterModule(true))
                .build()
                .inject(this)
        // Here numberWriter is injected
        // Here numberWriter2 is NOT injected
    }
}

Есть идеи, почему третий @Provides не может быть введен?Я не вижу сообщений об ошибках, но в модуле Android Studio видно, что provideDecimalNumberWriter никогда не используется.Нет ошибок при запуске проекта

1 Ответ

0 голосов
/ 07 июня 2018

После нескольких часов экспериментов я создал свой класс для инъекций DoubleNumberWriter и интерфейс NumberWriter, который реализует мою бизнес-логику в пакете с другим именем, и он начал работать.Возможно, кинжалу не понравилось предыдущее название пакета double

...