当我尝试为接口 Domain Mapper<PlayerDataEntity, List<PlayerModel>> 提供实现时出错
Error when I try provide the implemenation for the interface DomainMapper<PlayerDataEntity, List<PlayerModel>>
Dagger 2.32
当我尝试为接口提供实现时出现以下错误 DomainMapper<PlayerDataEntity, List<PlayerModel>>
error: [Dagger/MissingBinding] me.androidbox.data.mappers.DomainMapper<? super me.androidbox.data.entities.PlayerDataEntity,? extends java.util.List<me.androidbox.domain.models.PlayerModel>> cannot be provided without an @Provides-annotated method.
public abstract interface ApplicationComponent {
^
me.androidbox.data.mappers.DomainMapper<? super me.androidbox.data.entities.PlayerDataEntity,? extends java.util.List<me.androidbox.domain.models.PlayerModel>> is injected at
me.androidbox.data.requests.imp.RequestPlayersImp(…, domainMapper)
me.androidbox.data.requests.imp.RequestPlayersImp is requested at
me.androidbox.app.application.ApplicationComponent.requestPlayersImp()
正在关注 类:
class RequestPlayersImp @Inject constructor(
private val footballServices: FootballServices,
private val domainMapper: DomainMapper<PlayerDataEntity, List<PlayerModel>>
) : PlayersInteractor {
}
class DomainMapperImp @Inject constructor(): DomainMapper<PlayerDataEntity, List<PlayerModel>> {
}
@Module
interface PlayerModule {
@Binds
fun provideRequestPlayersImp(requestPlayersImp: RequestPlayersImp): PlayersInteractor
@Binds
fun provideFootballServices(mockFootballServices: MockFootballServices): FootballServices
@Binds
fun provideDomainMapper(domainMapperImp: DomainMapperImp): DomainMapper<PlayerDataEntity, List<PlayerModel>>
}
不过,我可以通过创建一个新接口来解决这个问题:
interface DomainMapperEntityToDomain : DomainMapper<PlayerDataEntity, List<PlayerModel>>
并按如下方式使用。一切编译正常
class RequestPlayersImp @Inject constructor(
private val footballServices: FootballServices,
private val domainMapper: DomainMapperEntityToDomain
) : PlayersInteractor {
}
class DomainMapperImp @Inject constructor(): DomainMapperEntityToDomain {
}
@Binds
fun provideDomainMapper(domainMapperImp: DomainMapperImp): DomainMapperEntityToDomain
我的问题是为什么我不能使用以下界面:
DomainMapper<PlayerDataEntity, List<PlayerModel>>
非常感谢您的任何建议,
数据 类 以防它们很重要
@JsonClass(generateAdapter = true)
class PlayerDataEntity(
val data: List<PlayerEntity>
)
data class PlayerModel(
val playerId: Int,
val firstname: String,
val lastname: String,
val birthday: String,
val age: Int,
val weight: Int,
val height: Int,
)
使用这个:
DomainMapper<@JvmSuppressWildcards PlayerDataEntity, @JvmSuppressWildcards List< @JvmSuppressWildcards PlayerModel>>
而不是:
DomainMapper<PlayerDataEntity, List<PlayerModel>>
您可以在 this link
中找到更多详细信息
Dagger 2.32
当我尝试为接口提供实现时出现以下错误 DomainMapper<PlayerDataEntity, List<PlayerModel>>
error: [Dagger/MissingBinding] me.androidbox.data.mappers.DomainMapper<? super me.androidbox.data.entities.PlayerDataEntity,? extends java.util.List<me.androidbox.domain.models.PlayerModel>> cannot be provided without an @Provides-annotated method.
public abstract interface ApplicationComponent {
^
me.androidbox.data.mappers.DomainMapper<? super me.androidbox.data.entities.PlayerDataEntity,? extends java.util.List<me.androidbox.domain.models.PlayerModel>> is injected at
me.androidbox.data.requests.imp.RequestPlayersImp(…, domainMapper)
me.androidbox.data.requests.imp.RequestPlayersImp is requested at
me.androidbox.app.application.ApplicationComponent.requestPlayersImp()
正在关注 类:
class RequestPlayersImp @Inject constructor(
private val footballServices: FootballServices,
private val domainMapper: DomainMapper<PlayerDataEntity, List<PlayerModel>>
) : PlayersInteractor {
}
class DomainMapperImp @Inject constructor(): DomainMapper<PlayerDataEntity, List<PlayerModel>> {
}
@Module
interface PlayerModule {
@Binds
fun provideRequestPlayersImp(requestPlayersImp: RequestPlayersImp): PlayersInteractor
@Binds
fun provideFootballServices(mockFootballServices: MockFootballServices): FootballServices
@Binds
fun provideDomainMapper(domainMapperImp: DomainMapperImp): DomainMapper<PlayerDataEntity, List<PlayerModel>>
}
不过,我可以通过创建一个新接口来解决这个问题:
interface DomainMapperEntityToDomain : DomainMapper<PlayerDataEntity, List<PlayerModel>>
并按如下方式使用。一切编译正常
class RequestPlayersImp @Inject constructor(
private val footballServices: FootballServices,
private val domainMapper: DomainMapperEntityToDomain
) : PlayersInteractor {
}
class DomainMapperImp @Inject constructor(): DomainMapperEntityToDomain {
}
@Binds
fun provideDomainMapper(domainMapperImp: DomainMapperImp): DomainMapperEntityToDomain
我的问题是为什么我不能使用以下界面:
DomainMapper<PlayerDataEntity, List<PlayerModel>>
非常感谢您的任何建议,
数据 类 以防它们很重要
@JsonClass(generateAdapter = true)
class PlayerDataEntity(
val data: List<PlayerEntity>
)
data class PlayerModel(
val playerId: Int,
val firstname: String,
val lastname: String,
val birthday: String,
val age: Int,
val weight: Int,
val height: Int,
)
使用这个:
DomainMapper<@JvmSuppressWildcards PlayerDataEntity, @JvmSuppressWildcards List< @JvmSuppressWildcards PlayerModel>>
而不是:
DomainMapper<PlayerDataEntity, List<PlayerModel>>
您可以在 this link
中找到更多详细信息