【发布时间】:2018-11-09 23:23:44
【问题描述】:
我正在开发 Dagger2。我计划在this 项目中定义相同的架构。我遇到了错误。
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
我在谷歌上搜索并找到了几个在 AppModule .java 中使用 @Provider 的解决方案,我发现它已经存在了。
我错过了什么吗?
谢谢。
【问题讨论】:
标签: android mvvm data-binding dependency-injection dagger-2