我想匕首融入我的应用程序。我遇到了一个问题。我在运行时得到这个错误:
java.lang.IllegalStateException:错误创建对象图: com.app.NavigationController没有注射成员。你想添加一个注射构造?按类com.app.fragments.LoginFragment要求
我试图寻找到其他类似的答案,但没有任何帮助我至今...
要绘制建筑相关的一切都实现pretty很像 Android的活动图例子。
我有两个模块 ActivityModule
和 ApplicationModule
。
@Module( 包括= ApplicationModule.class, 注射= { MainActivity.class, LoginFragment.class })公共类ActivityModule { 私人BaseActivity活动; 公共ActivityModule(BaseActivity活动){ this.activity =活动; } @Provides @辛格尔顿 NavigationController provideNavigation(){ 返回新NavigationController(活动); }}
和其他
@Module( 注射= { MainActivity.class, LoginFragment.class}, 完整= FALSE)公共类ApplicationModule { 私人上下文的背景下; 公共ApplicationModule(上下文的背景下){ this.context =背景; } @Provides @辛格尔顿 ApiService provideApiService(){ .... 返回restAdapter.create(ApiService.class); }}
我在做什么错了?
更新:结果添加更多细节:
片段:
公共类LoginFragment扩展BaseFragment { // ... @注入 NavigationController导航; // ...
导航控制器:
公共类NavigationController {// ...公共NavigationController(BaseActivity活动){ this.activity =活动;}// ...}
解决方案
问题是回答了这把匕首 GitHub的问题#372
I'm trying to integrate Dagger into my application. And I ran into a problem. I'm getting this error at runtime:
java.lang.IllegalStateException: Errors creating object graph:
com.app.NavigationController has no injectable members. Do you want to add an injectable constructor? required by class com.app.fragments.LoginFragment
I tried looking into other, similar answers, but nothing helped me so far...
Everything related to graph construction is implemented pretty much like in Android Activity Graphs example.
I have two modules ActivityModule
and ApplicationModule
.
@Module(
includes = ApplicationModule.class,
injects = {
MainActivity.class,
LoginFragment.class
}
)
public class ActivityModule {
private BaseActivity activity;
public ActivityModule(BaseActivity activity) {
this.activity = activity;
}
@Provides
@Singleton
NavigationController provideNavigation() {
return new NavigationController(activity);
}
}
And another
@Module(
injects = {
MainActivity.class,
LoginFragment.class},
complete = false
)
public class ApplicationModule {
private Context context;
public ApplicationModule(Context context) {
this.context = context;
}
@Provides
@Singleton
ApiService provideApiService() {
....
return restAdapter.create(ApiService.class);
}
}
What am I doing wrong?
UPDATE: Adding more details:
Fragment:
public class LoginFragment extends BaseFragment {
//...
@Inject
NavigationController navigation;
//...
Navigation controller:
public class NavigationController {
//...
public NavigationController(BaseActivity activity) {
this.activity = activity;
}
//...
}
解决方案
Question was answered in this Dagger GitHub issue #372