gpt4 book ai didi

android - Dagger 代码有效,如何使 Toothpick 代码以同样的方式工作?

转载 作者:行者123 更新时间:2023-11-29 02:28:20 26 4
gpt4 key购买 nike

我开始使用 Toothpick,我需要从 Dagger 代码迁移到 Toothpick。

好吧,我的 Dagger 项目中有下一个字符串。

@Provides
@Singleton
@Named(ProjectsRepository.DB)
ProjectsRepository provideProjectsDBRepository(ProjectsDBRepository repository) {
return repository;
}

@Provides
@Singleton
ProjectsService provideProjectsService(ProjectsServiceImpl serviceImplementation) {
return serviceImplementation;
}

@Inject
@Named(ProjectsRepository.SERVER)
ProjectsRepository mServerRepository;

@Inject
@Named(ProjectsRepository.DB)
ProjectsRepository mDBRepository;

@Inject
public ProjectsServiceImpl() {

}

它工作正常(除了我仍然无法理解什么或谁将存储库/serviceImpelmentation 用于提供方法之外)。好吧,我正在尝试在 Toothpick 中做同样的事情并做下一步:

public RepositoryModule() {
bind(ProjectsRepository.class).withName(ProjectsServer.class).toInstance(new ProjectsServerRepository());
}

然后

public ServiceModule() {
bind(ProjectsService.class).toInstance(new ProjectsServiceImpl());
}

最后

@Inject
@ProjectsServer
ProjectsRepository mServerRepository;

@Inject
@ProjectsDatabase
ProjectsRepository mDBRepository;

@Inject
public ProjectsServiceImpl() {

}

我有上面的所有限定词。

接下来我将我的模块安装在 Fragment 类(Fragment Scope)中

Scope currentScope = Toothpick.openScopes(ApplicationInstance.class,ProjectsFragment.class);
currentScope.installModules(
new ServiceModule(),
new RepositoryModule());
Toothpick.inject(this, currentScope);

但最后我得到 NullPointerException,我的 ProjectsRepository 是空的,我不能使用它的实例的方法。

我哪里出错了?请帮忙“翻译”。

最佳答案

好吧,我只需要使用 Providers 来实现我的目标。不能说使用起来很透明。感谢大家。

Provider 可以在接下来的方式中使用(仅针对 Server Repository 显示)

首先是ServiceModule

public ServiceModule() {
bind(ProjectsService.class).toProvider(ProjectsServiceImplProvider.class);
}

二、RepositoryModule

public RepositoryModule() {
bind(ProjectsRepository.class).withName(ProjectsServer.class).toProvider(ProjectsServerRepositoryProvider.class);
}

三、ServiceImplProvider

public class ProjectsServiceImplProvider implements Provider<ProjectsServiceImpl> {

@Inject
@ProjectsServer
ProjectsRepository mServerRepository;

@Inject
@ProjectsDatabase
ProjectsRepository mDBRepository;

@Override
public ProjectsServiceImpl get() {
return new ProjectsServiceImpl(mServerRepository, mDBRepository);
}
}

最后一个 - RepositoryProvider(Api 或 DB - 取决于目标)

public class ProjectsServerRepositoryProvider implements Provider<ProjectsServerRepository> {

@Inject
SomeApi mApi;

@Override
public ProjectsServerRepository get() {
return new ProjectsServerRepository(mApi);
}
}

关于android - Dagger 代码有效,如何使 Toothpick 代码以同样的方式工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51010096/

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