我有一个如下所示的设计,一个接口扩展多个父接口,以及该接口的一个实现。
在我的客户端类中,我想只依赖于一个或多个父接口,而不是ZooKeeperClient
。我觉得这是一个更好的设计,因为它减少了我的客户端类依赖项的表面区域,并且它还使得在测试中模拟事物变得更容易。
e.g。
@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的事情吗?
答案 0 :(得分:2)
在Guice中没有这样的方法,你可以使用像ClassUtils.getAllInterfaces()这样的实用程序迭代所有接口并绑定它们。
答案 1 :(得分:1)