Инъекция конструктора Dagger 2 в kotlin с именованными аргументами
у меня есть такая зависимость:
@Singleton
class SpiceMix @Inject constructor(@field:[Named("oregano")] private val oregano: Spice,
@field:[Named("sage")] private val sage: Spice,
@field:[Named("rosemary")] private val rosemary: Spice)
и модуль для выполнения своих зависимостей:
@Module
class SpiceModule {
@Provides
@Named("oregano")
@Singleton
fun provideOregano(): Spice = Oregano()
@Provides
@Named("sage")
@Singleton
fun provideSage(): Spice = Sage()
@Provides
@Named("rosemary")
@Singleton
fun provideRosemary(): Spice = Rosemary()
на SpiceMix
затем вводится в различных местах моего приложения.
Spice cannot be provided without an @Provides-annotated method
Я думаю, что аннотации @Named не совсем работают в моей подписи конструктора. Я не совсем уверен, как я могу заставить его работать.
Примечание: это компилируется отлично, если я удаляю именованные аннотации и изменяю типы параметров конструктора для их конкретных форм. Тем не менее, Spice-это интерфейс, и он нужен мне для насмешливых целей в моих тестах.
что я могу сделать?
1 ответов
вы хотите аннотировать параметры конструктора, если вы делаете инъекцию конструктора, а не поля-используйте @param:
цель аннотации:
@Singleton
class SpiceMix @Inject constructor(@param:Named("oregano") private val oregano: Spice,
@param:Named("sage") private val sage: Spice,
@param:Named("rosemary") private val rosemary: Spice)
Edit: на самом деле, так как порядок разрешения для целей аннотаций
- парам;
- свойства;