我有一个如下所示的设计,其中一个接口扩展了多个父接口,并且该接口的一种实现.
在我的客户端类中,我只想依赖一个或多个父接口,而不是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)
如果没有,这里的设计有问题吗?我在做一些不吉利的事情吗?
解决方法:
Guice中没有这种方法,您可以使用ClassUtils.getAllInterfaces()之类的实用程序遍历所有接口并将其绑定.