2015-04-21 44 views
1

I asked并得到了一个答案如何绑定一个命名注入点。如何将工厂绑定到符合注释的注入点?

我不知道如何将工厂绑定到合格的注入点。

class SomeResource { 

    @Inject 
    @Some // is a @Qualifier, of course. 
    private MyType qualified; 
} 

我准备了一个工厂

class SomeFactory extends Factory<MyType> { 
} 

我停留在为

class SomeBinder extends AbstractBinder { 
    @Override protected void configure() { 
     // @@? 
    } 
} 

其实我是想知道如何使用ServiceBindingBuilder#qualifiedBy创建的粘合剂。

+0

没有'字符串'类型只是一个例子。我约束另一种类型。 –

+0

我需要知道如何将工厂绑定到注释限定注入点。 –

+0

Gotcha ......... –

回答

3

我需要一个用于限定符注释的实现。

public class Some_ 
    extends AnnotationLiteral<Some> 
    implements Some { 
} 

这样我就可以像这样使用。

bindFactory(Someactory.class) 
    .qualifiedBy(new Some_()) 
    .to(MyType.class); 

我真的不明白为什么ServiceBindingBuilder没有采取注释类不是一个实例的方法。

+0

另一个有趣的事情是,如果你有某种类型的工厂,并且它受到约束,那么泽西岛并没有给出有关实际注释的狗屎。例如,您可以使用自定义的或大小(最小= 0)。它只需要一个字段/参数的任何注释来通过检查开始。之后该值将使用工厂注入。 –

+0

如果您自己找到解决方案,您也可以接受自己的答案 –

+0

我无法使此解决方案起作用,至少与泽西2.25.1版本一样。在启动时泽西会抛出java.lang.IllegalArgumentException:创建FactoryDe​​scriptors必须将Factory作为第一个参数的契约。我最终最终创建了一个自定义注释,如此处所述https://stackoverflow.com/a/41436316/5661065 – hayduke