2015-04-21 70 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