匕首 - 类有没有注射成员 [英] Dagger - class has no injectable members

查看:175
本文介绍了匕首 - 类有没有注射成员的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想匕首融入我的应用程序。我遇到了一个问题。我在运行时得到这个错误:

  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

这篇关于匕首 - 类有没有注射成员的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆