我开始使用牙签,我需要从匕首代码迁移到牙签。
好吧,我在 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 为空,我不能使用它的实例方法。
我在哪里犯错?请帮忙“翻译”。