为什么 class 没有注入模块?

Why class isn't injected to module?

我有一些带 MVP 的 Group 模块 pattern.I 刚开始学习 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();

所以我希望在生成的组件中有下一个代码 class:

    @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 为您开箱即用,但这不是您所需要的。您需要自定义范围,例如:

@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

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

https://proandroiddev.com/dagger-2-component-relationships-custom-scopes-8d7e05e70a37