Java 为什么阶级不是';t注入模块?

Java 为什么阶级不是';t注入模块?,java,android,dagger,Java,Android,Dagger,我有一些MVP模式的组模块。我刚刚开始学习Dagger2,我希望GroupComponent将存储库注入presenter,并为GroupFragment提供presenter 这是我的存储库: public class GroupServerRepository { @Inject public GroupServerRepository(){} 我的演示者: public class GroupPresenter implements Lif

我有一些MVP模式的组模块。我刚刚开始学习Dagger2,我希望GroupComponent将存储库注入presenter,并为GroupFragment提供presenter

这是我的存储库:

    public class GroupServerRepository {
        @Inject
        public GroupServerRepository(){}
我的演示者:

    public class GroupPresenter implements LifecycleObserver {
        private GroupServerRepository repository;
        @Inject
        public GroupPresenter(GroupServerRepository repository){
            this.repository = repository;
        }
组成部分:

    @Component
    interface GroupComponent{
        GroupPresenter getPresenter();
        GroupServerRepository getRepository();
    }
片段:

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_group, container, false);

        GroupContracts.GroupComponent component = 
        DaggerGroupContracts_GroupComponent.create();
        presenter = component.getPresenter();
所以我希望在生成的组件类中有下一个代码:

    @Override
    public GroupPresenter getPresenter() {
        return new GroupPresenter(getRepository());
    }

    @Override
    public GroupServerRepository getRepository() {
        return new GroupServerRepository();
    }
但不是这个,我有下一个:

    @Override
    public GroupPresenter getPresenter() {
        return new GroupPresenter(new GroupServerRepository());
    }

    @Override
    public GroupServerRepository getRepository() {
        return new GroupServerRepository();
    }

我试图重建项目,但没有帮助。

正如Jannik指出的,存在范围界定问题。每次使用@Inject或@Provides时,都会创建一个新实例。你需要有一些范围。有一个开箱即用的范围是@Singleton,但它不是您所需要的。您需要自定义作用域,如:

@活动范围

@碎片镜

等等

以下是一个例子:

您可以检查项目本身,这是正确使用Dagger2的一个很好的例子

以下是一篇关于该应用程序的文章:

但请阅读一些有关作用域如何工作的内容


我认为您需要向GroupServerRepository类添加范围注释,例如
@Singleton
。然后dagger每次都会重复使用相同的实例。