使用吉斯,如果我有吉斯:使用@Named創建對象
@Inject @Named("light")
Color light;
我可以使用
bind(Color.class).annotatedWith(Names.named("light"))
.toInstance(new Color("white"));
將其綁定到白色,如果Color構造只需要顏色名稱。
但是,如果Color構造函數也需要由Guice創建的對象,我該怎麼做?例如:
@Inject
public Color(ColorSet colorset, String colorName) {...}
其中colorset在運行時由Guice創建,並且在configure(){...}中不可用。
我想做到這一點,而不:
- 創造的每個我需要注入直接使用反射來在我的代碼
- 改變我的類(比如WhiteColor)
- 顏色的類/子類使用
ColorFactoy factory; factory.get("light");
而不是@Named("light") Color light;
這是個好主意,也許我也可以將它與Modules.override()。with()混合使用以重用它們。 –
這是有幫助的 - 任何想法如何使用Guice注入器來獲取任一實例?尋找類似'Guice.createInjector(FooModule).getInstance(Color.class)',但具有「白色」或「黑色」的規格。 – Galz
我不知道你如何使用@Named來做,但你應該使用綁定註釋(https:// github。com/google/guice/wiki/BindingAnnotations)。然後你可以說injector.getInstance(Key.get(Color.class,Black.class))(儘管我可能在某處丟失了泛型類型規範)。 getInstance(...)被重載以獲取Key(http://google.github.io/guice/api-docs/latest/javadoc/index.html?com/google/inject/Injector.html),而不是隻是一堂課。 –