Я начинаю использовать 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() {
}
Работает нормально (помимо того, что я до сих пор не могу понять, что или кто поставил репозиторий / сервис-имплементацию для предоставления-методов).
Ну, я пытаюсь сделать то же самое в Зубочистке и сделать следующее:
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 имеет значение null, и я не могу использовать метод его экземпляра.
Где я делаю ошибки? Пожалуйста, помогите "перевести".