У меня возникли проблемы с Dagger2, что следующее:Предоставление различных объектов конкретизации с Dagger2
У меня есть XML Serializer, который принимает формат, стратегию и Искателя. Моя проблема заключается в том, что формат может быть один из следующих:
new Format()
new Format("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
Мой способ исправить это, чтобы создать интерфейсы Классификатор следующим образом:
@Qualifier @Retention(RUNTIME) public @interface NoFormat {}
@Qualifier @Retention(RUNTIME) public @interface WithFormat {}
[Edit:] // @Qualifier @Retention(RUNTIME) public @interface FormatSerializer {} <- This was unecessary
[Edit:] // @Qualifier @Retention(RUNTIME) public @interface NoFormatSerializer {} <- This was unecessary
А затем указать различные реализации каждого классификатора:
@Provides @Singleton @WithFormat Format provideWithFormat() {
return new Format(XML_PROLOG);
}
@Provides @Singleton @NoFormat Format provideNoFormat() {
return new Format();
}
@Provides @Singleton @WithFormat
Serializer provideFormattedSerializer(Strategy strategy, @WithFormat Format format,RegistryMatcher matcher) {
return new Persister(strategy, matcher, format);
}
@Provides @Singleton @NoFormat
Serializer provideNoFormatSerializer(Strategy strategy, @NoFormat Format format,RegistryMatcher matcher) {
return new Persister(strategy, matcher, format);
}
@Provides @Singleton
Retrofit provideRestAdapter(@WithFormat Serializer serializer) {}
@Provides @Singleton
XmlApiSerializer provideXmlApiSerializer(@NoFormat Serializer serializer) {}
Это правильный подход? Я чувствую, что это слишком много. Я пробовал разные подходы, но я никогда не мог сообщить кинжалу, какую реализацию он должен использовать для каждого случая. Это был мой единственный случай «успеха».
Что вы думаете об этом? Можно ли улучшить его? Как?
Редактировать: Я понял, что использовал 2 отборочных, которые не были нужны. Теперь у меня есть только спецификатор forformat и noformat.
либо '@ Qualifier's работы, или' @Named («ФОРМАТ») и '@Named («NO_FORMAT»)' – EpicPandaForce
Да я в конечном итоге делает это с @Named который является в основном то, что я делаю, но это обеспечивается кинжалом – Peddro
Это версия кинжала «проблемы с ногами»: https://github.com/google/guice/wiki/FrequentlyAskedQuestions#how-do-i-build-two-similar-but-slightly- различные деревья-оф-объектов – gk5885