- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我开始使用 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/
假设我有一个模块,其中一个绑定(bind)依赖于另一个: class MyModule : Module(){ init { bind(SettingsStorage::class.jav
尝试在 fragment 中使用 Toothpick DI 时出现奇怪的错误: toothpick.registries.NoFactoryFoundException: No factory cou
我开始使用 Toothpick,我需要从 Dagger 代码迁移到 Toothpick。 好吧,我的 Dagger 项目中有下一个字符串。 @Provides @Singleton @
假设我有作用域 S1,其中包含带有绑定(bind)的模块: bind(Repository.class).to(RepositoryImpl.class).singletonInScope() 然后
我正在寻找一种使用 ggplot() 创建线条的方法具有“尖”边缘,以获得“牙签”的整体外观。 例如,考虑以下可视化: library(tibble) library(ggplot2) my_df %
我开始了一个小型的概念验证练习,让我们了解 Toothpick DI framework与现有的基于 Gradle 的 Java 项目。我读过很多关于你可以在 Java 中使用 Toothpick 的
Dagger 2 能够使用多重绑定(bind)注入(inject)集合或映射。如何在 Toothpick 中做到这一点 例如我想要 @Inject constructor(val map: Map)
我是一名优秀的程序员,十分优秀!