Java 为什么阶级不是';t注入模块?
我有一些MVP模式的组模块。我刚刚开始学习Dagger2,我希望GroupComponent将存储库注入presenter,并为GroupFragment提供presenter 这是我的存储库: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
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每次都会重复使用相同的实例。