단검 2를 설치하기 시작했고 버그와 같은 이상한 문제에 직면했습니다.@ 제공하는 주석이 달린 메서드가 없으면 개체를 제공 할 수 없습니다.
나는 부모 구성 요소에 1을 더한 1 개의 주 구성 요소와 1 개의 하위 구성 요소가 있습니다.
내가 사용
compile "com.google.dagger:dagger:2.4"
apt "com.google.dagger:dagger-compiler:2.4"
annotationProcessor "com.google.dagger:dagger-compiler:2.4"
응용 프로그램 구성 요소이 prety 쉽습니다. 그냥 '플러스'하위 구성 요소 :
@Singleton @Component(modules = { AristocratsAppModule.class })
public interface AristocratsAppComponent {
StreamComponent plus(StreamModule module);
}
응용 프로그램 또한 모듈 아주 기본.
@Module public class AristocratsAppModule {
private static AristocratsApp app;
public AristocratsAppModule(AristocratsApp app) {
AristocratsAppModule.app = app;
}
@Provides @Singleton AristocratsApp providesApplication() {
return app;
}
@Provides @Singleton GsonXml providesGsonXml() {
return ...
}
@Provides @Singleton @Named("aristocrats") Retrofit providesAristocratsRetrofit() {
return ...
}
@Provides @Singleton @Named("last_fm") Retrofit providesLastFmRetrofit() {
return ...
}
}
하위 구성 두 StreamServices (개조 서비스) 간단한 분사 갖는다 :
@PerController @Subcomponent(modules = { StreamModule.class }) public interface StreamComponent {
void inject(StreamsController streamsController);
AristocratsStreamService providesAristocratsStreamService();
LastFmStreamService providesLastFmStreamService();
}
부성분의 모듈 표현 주입 및 개조 서비스의 두 가지 주사를 제공한다은 애플리케이션 레벨 의존성을 제공한다 :
@Module public class StreamModule {
private StreamsController mView;
public StreamModule(StreamsController view) {
mView = view;
}
@Provides @PerController StreamMvp.Presenter providesPresenter(StreamCase streamCase,
StreamModelMapper streamMapper) {
return new StreamPresenter(mView, streamCase, streamMapper);
}
@Provides @PerController AristocratsStreamService providesAristocratsStreamService(
@Named("aristocrats") Retrofit retrofit) {
return retrofit.create(AristocratsStreamService.class);
}
@Provides @PerController LastFmStreamService providesLastFmStreamService(
@Named("last_fm") Retrofit retrofit) {
return retrofit.create(LastFmStreamService.class);
}
}
Applicat 나는 내 응용 프로그램 클래스의()에서 onCreate에 전화 이온 주입 :
mAppComponent = DaggerAristocratsAppComponent.builder()
.aristocratsAppModule(new AristocratsAppModule(this))
.build();
내 컨트롤러에 전화를
보기 주입 :
Error:(13, 8) error: [com.qsoft.streams.presentation.di.StreamComponent.inject(com.qsoft.streams.presentation.StreamsController)] com.qsoft.streams.data.network.AristocratsStreamService cannot be provided without an @Provides-annotated method.
com.qsoft.streams.data.network.AristocratsStreamService is injected at
com.qsoft.streams.data.network.StreamApi.<init>(…, streamServiceAristocrats, …)
com.qsoft.streams.data.network.StreamApi is injected at
com.qsoft.streams.data.repository.StreamRepository.<init>(streamApi, …)
com.qsoft.streams.data.repository.StreamRepository is injected at
com.qsoft.streams.domain.interactors.StreamCase.<init>(streamRepository)
com.qsoft.streams.domain.interactors.StreamCase is injected at
com.qsoft.streams.presentation.di.StreamModule.providesPresenter(streamCase, …)
com.qsoft.streams.presentation.StreamMvp.Presenter is injected at
com.qsoft.streams.presentation.StreamsController.mPresenter
com.qsoft.streams.presentation.StreamsController is injected at
com.qsoft.streams.presentation.di.StreamComponent.inject(streamsController)
A binding with matching key exists in component: com.qsoft.streams.presentation.di.StreamComponent
: 나는 빌드하는 동안 받고 있어요
getAppComponent().plus(new StreamModule(this)).inject(this);
예외
누락 된 항목에 대한 오류는 @Provides-annotated method
이지만 내 하위 모듈에 있습니다. Dagger2는 단지 그들을 보지 못하는 것 같습니다. 나는이 문제가 하위 구성 요소에있는 AristocratsStreamService
의 누락 선언에있을 수 있다고 생각했기 때문에 거기에 추가했지만 아무 것도 변경되지 않았습니다.
이 상황은 매우 이상하게 보입니다. 경험 많은 Dagger2 개발자의 의견을 듣고 싶습니다.
미리 감사드립니다.
시도했지만 오류가 동일합니다. 그것은 그것을 제거하지 않았다. – Val