Android Dagger 2编译错误

蚕食

尝试创建第二个Dagger 2 Component并将某些东西注入到与第一个相同的类中时,出现编译错误。那是不允许的吗?我还没有找到任何说明不是的文档。

单元1:

@Module
public class NavModule {

    Context context;

    public NavModule(Context context){
        this.context = context;
    }

    @Provides @Named("nav")
    public List<NAV_ACTIONS> provideNavActions() {
        // Do some stuff
    }
}

组件1:

@Component(modules = {NavModule.class})
public interface NavComponent {

    void inject(MainActivity activity);
    void inject(AbstractHomeFragment fragment);
}

单元2:

@Module
public class OtherModule {

    Context context;

    public OtherModule(Context context){
        this.context = context;
    }

    @Provides
    public Object provideSomething(){
        return null;
    }
}

在这一点上,一切仍然可以编译。当我添加组件2时,它会中断:

@Component(modules = {OtherModule.class})
public interface OtherComponent {

    void inject(MainActivity activity);
    void inject(AbstractHomeFragment fragment);
}

错误如下:

Error:(14, 10) error: @javax.inject.Named("nav") java.util.List<NAV_ACTIONS> cannot be provided without an @Provides- or @Produces-annotated method.
@javax.inject.Named("nav") java.util.List<NAV_ACTIONS> is injected at
com.company.common.MainActivity.navActions
com.company.common.MainActivity is injected at
com.company.common.dependency.OtherComponent.inject(activity)

Error:(15, 10) error: @javax.inject.Named("home") java.util.List<com.company.common.NAV_ACTIONS> cannot be provided without an @Provides- or @Produces-annotated method.
@javax.inject.Named("home") java.util.List<com.company.common.NAV_ACTIONS> is injected at
com.company.common.views.AbstractHomeFragment.homeActions
com.company.common.views.AbstractHomeFragment is injected at
com.company.common.dependency.OtherComponent.inject(fragment)

E:\Development\Repositories\PropertyForce\PropertyForce_Android\app\src\main\java\com\company\common\MainActivity.java
Error:(50, 47) error: cannot find symbol class DaggerNavComponent
Error:(50, 47) error: cannot find symbol class DaggerNavComponent

E:\Development\Repositories\PropertyForce\PropertyForce_Android\app\src\main\java\com\company\common\views\AbstractHomeFragment.java
Error:(29, 47) error: cannot find symbol class DaggerNavComponent
Error:(29, 47) error: cannot find symbol class DaggerNavComponent

这是来自的Dagger相关资料MainActivity编辑器未显示任何错误。

import com.company.common.dependency.DaggerNavComponent;
import com.company.common.dependency.NavComponent;
import com.company.common.dependency.NavModule;
// ...
@Inject @Named("nav") List<NAV_ACTIONS> navActions;
// ...
@Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        NavComponent navComponent = DaggerNavComponent.builder().navModule(new NavModule(this)).build();
        navComponent.inject(this);
// ...

AbstractHomeFragment 在做非常相似的事情。

Vatsal Bajpai

您需要已在Application中声明的单个组件的注入模块列表中一起添加NavModuleOtherModule

@Component(modules = {OtherModule.class, NavModule.class})
public interface OtherComponent {

    void inject(MainActivity activity);
    void inject(AbstractHomeFragment fragment);
}

编辑-您可以具有多个组件,但是需要在Application.class文件中对其进行初始化我建议在这里使用单个,因为您要在同一类中注入2个不同的模块。

希望这可以帮助 :)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章