2012-11-28 50 views
0

我有一個類,如:如何搶先Guice的CreationException可選組件

Names.bindProperties(binder(), props); 

但如果x沒有設置,我想:

class Foo { 
    Foo(@Named("x") x) { ... } 
} 

xProperties對象綁定跳過綁定Foo。一種方法是:

if (props.contains("x")) { 
    bind(Foo.class); 
} 

但是有沒有更好的方法?

if (namedPropsBound(Foo.class)) { // how to implement this method? 
    bind(Foo.class); 
} 

回答

1

原因是:用@Nullable註釋x應該執行該技巧。當然,這隻允許在Foo中注入缺少的X,它不會避免注入Foo。

試試這個: 您可以使用TypeListener,如http://code.google.com/p/google-guice/wiki/CustomInjections中所述。每當Guice嘗試注入Foo時,都可以根據您的屬性狀態來阻止它。

+0

我仍然得到一個Foo實例化。我如何避免這種情況? – ejain

+0

誤解了這個問題,看到更新的答案 –

+0

有趣的想法,但即使這可能會起作用(構造函數注入,Foo實際上是用Multibinder等註冊的),它看起來像最終會變得更醜陋,而且不會更通用而不是我現在的單線條件聲明。 – ejain