2011-10-05 113 views
0

我有一个接口:InterfaceA基于类的注释绑定构造函数参数

我有一个班级:ConcreteA

我也有两个注解:@AnnotA@AnnotB

我也做了以下绑定:

bind(InterfaceA).annotatedWith(AnnotA).to(ConcreteA); 
bind(InterfaceA).annotatedWith(AnnotB).to(ConcreteA); 

接下来,类ConcreteA有一个构造函数,需要一个String参数调用主机名

class ConcreteA 
{ 
    @Inject 
    public ConcreteA(@Named("hostName") hostName) { 
    } 

    ... <rest of class> 
} 

我需要代码来描述以下内容:

如果ConcretaA使用@AnnotA然后用 '本地主机' 字符串值绑定的主机名

如果ConcreteA使用@AnnotB然后将hostName与字符串绑定为'externalhost'值

A对于这个解决方案有没有想法?

回答

1

我觉得在你的情况下,你可能会考虑把每个绑定放在它自己的私有模块中。

class MyModule() { 
    install(new PrivateModule() { 
    public void configure() { 
     bind(InterfaceA).to(ConcreteA); 
     bind(String.class).annotatedWith(Names.named("hostName").to("localhost"); 
     expose(InterfaceA).annotatedWith(AnnotA.class); 
    }}); 
    install(new PrivateModule() { 
    public void configure() { 
     bind(InterfaceA).to(ConcreteB); 
     bind(String.class).annotatedWith(Names.named("hostName").to("externalhost"); 
     expose(InterfaceA).annotatedWith(AnnotB.class); 
    }}); 
} 

(这是从内存和语法可能不是100%正确的。)

更多细节,开始与the Guice FAQ,和搜索页面的“机器人腿” - 我不是在开玩笑:)

从FAQ的该部分的其他两个链接还有更多的细节。

+0

我目前正在读的机器人腿的问题,但要注意,没有ConcreteB类。只有一个ConcreteA类。 –

+0

这解决了我的问题。谢谢。 –

相关问题