У меня есть дизайн, как показано ниже, с одним интерфейсом, расширяющим несколько родительских интерфейсов, и одной реализацией этого интерфейса.Автоматическое связывание нескольких интерфейсов с одним из них в Guice
В моих клиентских классах я хочу зависеть только от одного или нескольких родительских интерфейсов, а не ZooKeeperClient
. Я чувствую, что это лучший дизайн, поскольку он уменьшает площадь поверхности зависимостей моего клиентского класса, а также облегчает издевательство над вещами в тестах.
например.
@Inject
public Foo(ServiceUpdater su) {
// ...
}
Однако для того, чтобы достичь этого мне нужно вручную добавить привязки от каждого интерфейса к классу реализации:
bind(ServiceCreator.class).to(ZooKeeperClientImpl.class)
bind(ServiceDeleter.class).to(ZooKeeperClientImpl.class)
bind(ServiceUpdater.class).to(ZooKeeperClientImpl.class)
// ...
bind(ZooKeeperClient.class).to(ZooKeeperClientImpl.class)
Есть ли способ, я могу избежать этого повторения и сказать Guice, чтобы привязать целая иерархия сразу? Что-то вроде ...
bind(ZooKeeperClient.class/* and its parents*/).to(ZooKeeperClient.class)
Если нет, то что-то не так с моим дизайном здесь? Я делаю что-то не-Guicy?
Спасибо за подтверждение и ссылку. –