为什么 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
等等
这是一个例子:
您可以检查项目本身,这是正确使用 Dagger2 的一个很好的例子。
https://github.com/google/iosched
这是一篇关于该应用程序的文章:
https://medium.com/@JoseAlcerreca
但请阅读范围的工作原理。
https://proandroiddev.com/dagger-2-component-relationships-custom-scopes-8d7e05e70a37
我有一些带 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
等等
这是一个例子:
您可以检查项目本身,这是正确使用 Dagger2 的一个很好的例子。
https://github.com/google/iosched
这是一篇关于该应用程序的文章:
https://medium.com/@JoseAlcerreca
但请阅读范围的工作原理。
https://proandroiddev.com/dagger-2-component-relationships-custom-scopes-8d7e05e70a37