I'm trying to implement a dagger to my Android Project with MVVM structure. I've succeeded in injecting retrofit API service to my ViewModel using Module and Component with a field injection. But I keep getting an error when I try to inject my RoomDatabase with provision method (DaggerComponent.Builder).
I'm still completely unfamiliar with the dagger, is there something wrong with my code?
DatabaseModule.java
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
@Module
public class DatabaseModule {
private AppDatabase database;
public DatabaseModule(Application application) {
database = Room.databaseBuilder(application, AppDatabase.class,
"pendingDb").build();
}
@Singleton
@Provides
AppDatabase provideDatabase(){
return database;
}
@Singleton
@Provides
PendingTodoListDao providePendingDao(AppDatabase database){
return database.pendingTodoListDao();
}
}
Component
import javax.inject.Singleton;
import dagger.Component;
@Singleton
@Component(modules = {ApiModule.class, ContextModule.class,
DatabaseModule.class})
public interface ApiComponent {
void inject(ApiService service);
void inject(DeliveredViewModel viewModel);
void inject(ToDoViewModel viewModel);
void inject(DeliveredDetailsViewModel viewModel);
void inject(PendingViewModel viewModel);
AppDatabase appDatabase();
}
PendingViewModel.java
public class PendingViewModel extends AndroidViewModel {
@Inject
AppDatabase db;
public PendingViewModel(@NonNull Application application) {
super(application);
DaggerApiComponent.builder().databaseModule(
new DatabaseModule(application)).build();
}
}