2
我有一個Guice注入一些其他服務的託管服務。其他服務的使用取決於傳遞給我的服務方法的鍵值。所以,我想打一個Map
映射服務來使用相應的鍵:使用Guice注入Map的值
@Inject
private IServiceA serviceA;
@Inject
private IServiceB serviceB;
private Map<String, IService> mapping;
private Map<String, IService> getMapping() {
if (mapping == null) {
mapping = new HashMap<String, IService>();
mapping.put("keyA", serviceA);
mapping.put("keyB", serviceB);
}
}
@Override
public void myServiceMethod(String key) {
IService serviceToUse = getMapping().get(key);
// ... use some methods of the identified service
}
該解決方案的工作,但似乎尷尬,因爲我必須有映射的這種延遲初始化。我嘗試使用static
塊,但實例成員尚未由Guice初始化。
我寧願直接向Guice注入映射值,但我不知道如何實現這一點。
我可能會偏離主題,你可能會考慮使用不同的模式:你可以* @提供*你的IService類,並使用@Named註釋來映射它們中的每一個 – Joel