Это мой класс компонента приложения
@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>(){
Градель
//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'
Ошибка: [Dagger / MissingBinding] io.reactivex.Одноразовые. CompositeDisposable не может быть предоставлен без конструктора @Inject или метода, аннотированного @ Provides.открытый интерфейс AppComponent {^ io.reactivex.disposables.CompositeDisposable предоставляется по адресу com.sisindia.csat.deps.AppComponent.getCompositeDisposable (). Он также запрашивается по адресу: com.sisindia.csat.projectmodules.score.AverageViewModel (…) ComdisDisposisСледующие другие точки входа также зависят от него: com.sisindia.csat.deps.AppComponent.inject (com.sisindia.csat.projectmodules.score.AverageScoreActivity) com.sisindia.csat.deps.AppComponent.getVMCompositeDisposable ()