为什么不将类注入模块?

问题描述 投票:0回答:1

我有一些具有MVP模式的Group模块。我刚开始学习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:

    @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();
    }

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

java android dagger
1个回答
0
投票

就像Jannik指出的那样,存在范围界定问题。每当您只使用@Inject或@Provides时,都会创建一个新实例。您需要具有一些范围。开箱即用的范围是@Singleton,但这不是您所需要的。您需要自定义范围,例如:

@ ActivityScope

@ FragmentScope

这里是一个例子:

https://github.com/google/iosched/blob/master/shared/src/main/java/com/google/samples/apps/iosched/shared/di/ActivityScoped.java

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

https://github.com/google/iosched

这里是有关该应用程序的文章:

https://medium.com/@JoseAlcerreca

但是请阅读范围的工作原理。

© www.soinside.com 2019 - 2024. All rights reserved.