Я работаю над Dagger2.Я планирую иметь ту же архитектуру, определенную в этом проекте.Я получаю сообщение об ошибке ниже.
Error:(34, 8) error: [dagger.android.AndroidInjector.inject(T)]
com.xyz.db.DBHelper cannot be provided without an @Inject constructor or
from an @Provides-annotated method.
com.xyz.data.local.db.DBHelper is injected at
com.xyz.data.local.db.PatientDatabase.<init>(…, dbHelper, …)
com.xyz.data.local.db.PatientDatabase is injected at
com.xyz.di.module.AppModule.provideDataManager(patientDatabase)
com.xyz.data.DataManager is injected at
com.xyz.ui.main.MainActivityModule.provideMainViewModel(dataManager)
com.xyz.ui.main.MainViewModel is injected at
com.ccmpat.patient.ui.main.MainActivityModule.mainViewModelProvider (mainViewModel)
android.arch.lifecycle.ViewModelProvider.Factory is injected at
com.xyz.ui.main.MainActivity.mViewModelFactory
com.xyz.ui.main.MainActivity is injected at
dagger.android.AndroidInjector.inject(arg0)
Однако AppModule .java уже использует аннотацию @Provides /
@Module
public class AppModule {
@Provides
@Singleton
DataManager provideDataManager(PatientDatabase patientDatabase) {
return patientDatabase;
}
}
Мой AppComponent.java выглядит как
@Singleton
@Component(modules = {AndroidInjectionModule.class, AppModule.class, ActivityBuilder.class, NetworkModule.class})
public interface AppComponent {
void inject(PatientApplication app);
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
AppComponent build();
}
}
PatientDatabase.java выглядит так:
@Singleton
public class PatientDatabase implements DataManager {
private final Context mContext;
private final DBHelper mDBDbHelper;
private final PreferenceHelper mPreferencesHelper;
@Inject
public PatientDatabase(Context context, DBHelper dbHelper, PreferenceHelper preferenceHelper) {
mContext = context;
mDBDbHelper = dbHelper;
mPreferencesHelper = preferenceHelper;
}
}
Мой DBHelper.java просто расширяет OrmLiteSqliteOpenHelper
Я нашел и нашел пару решений для использования @Provider в AppModule .java со ссылкой, и янашел его уже там.
Я что-то упустил?
Спасибо.