不能在没有@Inject构造函数或@Providers注释方法的情况下提供



这是我的应用程序组件类

@Singleton
@Component(dependencies = {}, modules = {AppModule.class,RoomModule.class, NetworkModule.class})
public interface AppComponent {
void inject(CSATApplication applicationController);
void inject(AverageScoreActivity averageScoreActivity);


CsatDao csaatdao();
CSATDatabase csatDatabase();
RemoteRepositoryImpl getRemoteRepo();
LocalRepositoryImpl getLocalRepo();
Application application();
BaseUrlHolder provideBaseUrlHolder();
Retrofit getRetrofit();
CompositeDisposable getCompositeDisposable();
CompositeDisposable getVMCompositeDisposable();

}

@模块公共类RoomModule{

private CSATDatabase CSATDatabase;

public RoomModule(Application mApplication) {
CSATDatabase = Room.databaseBuilder(mApplication, CSATDatabase.class, AppConstants.DATABASE_NAME).build();
}
@Singleton
@Provides
CSATDatabase providesRoomDatabase() {
return CSATDatabase;
}
@Singleton
@Provides
CsatDao providesCsatDao(CSATDatabase CSATDatabase) {
return CSATDatabase.getCsatDao();
}
@Singleton
@Provides
public RemoteRepository getRemoteRepo(NetworkService networkService){
return new RemoteRepositoryImpl(networkService);
}
@Singleton
@Provides
public LocalRepository getLocalRepo(CsatDao csatDao, Executor exec){
return new LocalRepositoryImpl(csatDao, exec);
}
@Provides
@Named("activity")
public CompositeDisposable getCompositeDisposable(){
return new CompositeDisposable();
}
@Provides
@Named("vm")
public CompositeDisposable getVMCompositeDisposable(){
return new CompositeDisposable();
}

注入活性

@Inject @field:Named("activity")
lateinit var compositeDisposable: CompositeDisposable
@Inject
lateinit var averageViewModelFactory: AverageViewModelFactory
@Inject
lateinit var averageViewModel: AverageViewModel

注入视图模型工厂

class AverageViewModelFactory @Inject
constructor() : @JvmSuppressWildcards  ViewModelProvider.Factory {
@Inject
lateinit var localRepository: LocalRepository
@Inject
lateinit  var remoteRepository: RemoteRepository
@Inject @field:Named("vm")
lateinit var compositeDisposable: CompositeDisposable
@Override
override fun <T : ViewModel> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(AverageViewModel::class.java)) {
return AverageViewModel(localRepository, remoteRepository, compositeDisposable) as T
}
throw IllegalArgumentException("Wrong ViewModel class")
}

}

class AverageViewModel @Inject constructor(
val localRepository: LocalRepository,
val remoteRepository: RemoteRepository,
val compositeDisposable: CompositeDisposable
) : BaseViewModel<AverageInteractor.view>(){

Gradel

//Dependencies injection
implementation 'com.google.dagger:dagger:2.19'
implementation 'com.google.dagger:dagger-android:2.19'
kapt 'com.google.dagger:dagger-compiler:2.19'
annotationProcessor 'com.google.dagger:dagger-compiler:2.19'
kapt 'com.google.dagger:dagger-android-processor:2.19'
compileOnly 'javax.annotation:jsr250-api:1.0'

错误错误:在没有@Inject构造函数或@Providers注释方法的情况下,无法提供[Dager/MissingBinding]io.reactivex.disposables.CompositeDisposable。公共接口AppComponent{^io.reactivex.disposables.CompositeDisposable位于com.sisindia.csat.deps.AppComponent.getCompositeDisposable((也可在以下网址索取:com.sisindia.csat.projectmodules.score.AverageViewModel(…,compositeDisposable(以下其他入口点也依赖于它:com.sisindia.csat.deps.AppComponent.inject(com.sisindia.csat.projectmodules.score.AverageScoreActivity(com.sisindia.csat.deps.AppComponent.getVMCompositeDisposable((

您需要在AppComponentAverageViewModel类中用@Named注释CompositeDisposable,如下所示:

public interface AppComponent {
...
@Named("activity") CompositeDisposable getCompositeDisposable();
@Named("vm") CompositeDisposable getVMCompositeDisposable(); 
}

class AverageViewModel @Inject constructor(
...
@Named("vm") val compositeDisposable: CompositeDisposable
) : BaseViewModel<AverageInteractor.view>(){

最新更新