1

我有两个不同的模块,它们对相同的接口和多个子模块有不同的绑定。下面的例子

public PublisherModule { 
     public void configure() {
         bind(ITransport.class).to(TCPTransport.class)
         install(new ServerModule()) //Has Binding EndPoint.class to ServerEndPoint.class
     }
}

public SubscriberModule { 
     public void configure() {
         bind(ITransport.class).to(HttpTransport.class)
         install(new ClientModule()) //Has binding EndPoint.class to ClientEndPoint.class
     }
}

现在我遇到了两个模块需要一起使用的用例。有什么解决方案吗?

PS:我现在不能使用任何命名绑定。我正在寻找类似的解决方案(这不起作用)

public void configure() {
Injector injPublisher = Guice.createInjector(new PublisherModule());
Publisher pub = injPublisher.createInjector(Publisher.class)

bind(Publisher.class).toInstance(pub)
install(new SubscriberModule());
}

有什么解决办法吗?

4

1 回答 1

0

正如@Jeff Bowman 所建议的,我可以访问模块,我可以对其进行编辑以将模块设为私有。

PS:实际上上面的配置方法代码是有效的。延迟创建的实例(例如,发布者中的 ITransport 引用是通过@辅助注入工厂创建的,该工厂也是基于某些客户端操作延迟实例化的)使用发布者模块的绑定。而早期创建的实例来自订阅者模块。不知道如何理解这种行为

于 2015-12-30T08:22:25.767 回答