Допустимы ли двусмысленные ножки робота?
В часто задаваемых вопросах Guice говорится о различении нескольких экземпляров с помощью аннотаций (вроде).
Мой вопрос: могу ли я привязать Impl к интерфейсу без аннотации и связать другой Impl с тем же интерфейсом с аннотацией? По сути, мой первый импл будет действовать как контейнер для других.
bind(SecurityAuthorizer.class).to(CompositeSecurityAuthorizer.class);
bind(SecurityAuthorizer.class)
.annotatedWith(Names.named(ComponentAuthorizer.class.getSimpleName()))
.to(ComponentAuthorizer.class).in(Singleton.class);
Дополнительный вопрос, считается ли использование Names.name (..) плохим? Я просто пытался избежать создания множества классов аннотаций, но хотел иметь возможность рефакторинга.
1 ответ
Решение
Да, это должно просто сработать. Возможно, вы захотите взглянуть на Multibindings, который разработан для таких сценариев, как этот. Составная реализация внедрила бы набор интерфейсов:
public class CompositeSecurityAuthorizer {
@Inject
CompositeSecurityAuthorizer(Set<SecurityAuthorizer> authorizers) {
...
}
}