@BindsInstance
, наиболее полезно, когда у вас есть зависимости, которые необходимо ввести в граф объектов в время выполнения .
@Binds
используется, когда вам нужно привязать интерфейс к реализации. и кинжал может создать конкретную реализацию для вас (через конструктор @Inject
)
Не похоже, что ваши Constants.SOCKET_URL_KEY
& Constants.API_URL_KEY
соответствуют ни одному из этих критериев, поэтому ...
Если это правда, что они доступны во время компиляции и , то вам нужен кинжалчтобы обеспечить это, проще всего сделать это, добавив в свой модуль следующее:
@Provides
@JvmStatic
@Named(Constants.API_URL_KEY)
fun providesApiUrlKey(): String {
return "YOUR_API_KEY"
}
и удалите:
@BindsInstance
@Named(Constants.API_URL_KEY)
fun apiUrl(apiUrl: String): Builder
В любой ситуации (доступно во время выполнения иливремя компиляции), вам нужно удалить это:
@Binds
@Named(Constants.API_URL_KEY)
abstract fun provideApiUrl(apiUrl: String): String
@Binds
@Named(Constants.SOCKET_URL_KEY)
abstract fun provideSocketUrl(socketUrl: String): String