В билдере компонента сделай метод (название не важно)
@BindsInstance
fun bindInteractor(interactor: SavedListInteractor): Builder
когда будешь создавать компонент во фрагменте, вызовешь этот метод
https://dagger.dev/api/2.10/dagger/BindsInstance.html
Ещё можно сделать примерно так:
@Qualifier
annotation class MyFlag
@Component(modules = [InteractorModule::class])
interface MyComponent {
@Component.Builder
interface Builder {
@BindsInstance
fun bindMyFlag(@MyFlag flag: Int): Builder
fun build(): MyComponent
}
...
}
@Module
object InteractorModule {
@Provides
fun provideInteractor(@MyFlag flag: Int, impl0: Provider< FavoritedListImpl>, impl1: Provider< IgnoredListImpl>): SavedListInteractor = when (flag) {
0 -> impl0.get()
1 -> impl1.get()
else -> throw IllegalArgumentExcepion("Unknown flag: $flag")
}
}
То есть в граф суём аннотированный флаг, который приходит в аргументы(можно обойтись без аннотации, но покарают боги даггера - хуже неименованного инта в графе только неименованный инт в шине событий. Не комильфо, короче). Потом по этому флагу лениво разруливаем, какую реализацию отдать