2015-12-29 59 views
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()); 
} 

是否有任何解决方法?

+0

你能编辑你列出的模块吗?如果是这样,您可能需要考虑[PrivateModule](http://google.github.io/guice/api-docs/latest/javadoc/com/google/inject/PrivateModule.html),因此您只能公开'Publisher.class '和'Subscriber.class'。 –

+0

谢谢,这是一个很大的选择。但是我们有太多的模块和接口..需要重构很多.. – Krishna

回答

0

正如@Jeff Bowman所建议的,我可以访问模块,我可以编辑它以使模块保密。

PS:其实上面的一段配置方法代码正在工作。 懒惰地创建的实例(例如,发布者中的ITransport引用是通过@assisted注入​​工厂创建的,它也基于某些客户端操作而实例化)使用发布器模块的绑定。早期创建的实例来自订户模块。不知道如何理解这种行为

相关问题