我遇到了注入泛型类型接口的问题。不知道如何做到这一点或谷歌,因为我不知道搜索的确切条款。对不起,如果我完全错误,只是开始匕首。依赖注入 - Dagger2 - 泛型
基本上我有一个用例类
public class LoadConversations<C extends IConversation>
extends UseCase<List<C>, LoadConversations.Type> {
private final IConversationRepository<C> messageRepository;
@Inject LoadConversations(@NonNull IConversationRepository<C> messageRepository) {
this.messageRepository = messageRepository;
}
....
public enum Type {
ALL, NEWER, OLDER
}
}
随着IConversationRepository
作为一个接口。
public interface IConversationRepository<C extends IConversation> {
Observable<List<C>> conversations(LoadConversations.Type params);
}
IConversation
是一个空白接口和ConversationModule
其中i提供IConversationRepository
。
我有问题注入下面的代码。我是否错过了什么或者做了些什么错误的事情。提前致谢。
试图提供如下:
@Provides IConversationRepository<Conversation> provideConversationRepository(
ConversationRepository conversationRepository) {
return conversationRepository;
}
我试图为
实施ConversationRepository
public class ConversationRepository implements IConversationRepository<Conversation> {
@Override public Observable<List<Conversation>> conversations(LoadConversations.Type params) {
....
}
}
private final LoadConversations<Conversation> loadConversations;
@Inject public ConversationListPresenter(LoadConversations<Conversation> loadConversations) {
this.loadConversations = loadConversations;
}
错误日志注入这对我的演讲:
Error:(15, 10) error: com.rbttalk.android.data.repository.ConversationRepository cannot be provided without an @Inject constructor or from an @Provides-annotated method.
com.rbttalk.android.data.repository.ConversationRepository is injected at
com.rbttalk.android.di.module.sub_modules.ConversationModule.provideConversationRepository(conversationRepository)
com.rbttalk.android.domain.repository.IConversationRepository<com.rbttalk.android.domain.models.Conversation> is injected at
com.rbttalk.android.domain.usecase.conversation.LoadConversations.<init>(arg0, …)
com.rbttalk.android.domain.usecase.conversation.LoadConversations<com.rbttalk.android.domain.models.Conversation> is injected at
com.rbttalk.android.ui.main.conversation.ConversationListPresenter.<init>(loadConversations)
com.rbttalk.android.ui.main.conversation.ConversationListPresenter is injected at
com.rbttalk.android.ui.main.conversation.ConversationListFragment.userListPresenter
com.rbttalk.android.ui.main.conversation.ConversationListFragment is injected at
com.rbttalk.android.di.component.ConversationComponent.inject(conversationListFragment)
很好的解释。我确实意识到了这个错误,但是你明确地说明了为什么需要这个错误。 – riteshakya037