gpt4 book ai didi

java - 为什么类没有注入(inject)到模块中?

转载 作者:行者123 更新时间:2023-12-01 22:57:30 26 4
gpt4 key购买 nike

我有一些带有 MVP 模式的 Group 模块。我刚刚开始学习 Dagger2,我希望 GroupComponent 将存储库注入(inject)到 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();
}

fragment :

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

@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

关于java - 为什么类没有注入(inject)到模块中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58433493/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com