2
私はこのゲームでguiceをしばらく使ってきましたが、私がこの場合にしたいものを達成する方法を理解するのに十分ではありません。 AssistedInject
、Throwing Providers
、およびMultibindings
の組み合わせが欲しいと思われますが、どのようにまとめたらいいか分かりません。これはうまくいかないボイルダウンコードです。 Guicierになる必要があります!名前のついた投げられたオブジェクトの投げ込みプロバイダ
public class Utilities {
public static String expensiveLookup(String key) throws IOException {...}
}
public class Helper {
@Inject private InjectedClass injectedValue;
public Helper(String value1, String value2, String value3) {...}
}
public class Workhorse {
// This map isn't very guicy. I'd prefer named bindings, or a multibinding
private static Map<String, Helper> helpers = new HashMap();
public static void register(String name, Helper helper) {
helpers.put(name, helper);
}
////////
@Inject lots of things
public void doHardWork(String helperName) {
Helper helper = helpers.get(helperName);
// do something hard
}
}
class UserModule extends AbstractModule {
protected void configure() {
// Helpers are created with `new`, so they don't get `injectedValue`
Workhorse.register("cheap helper", new Helper("cheap value", ...));
try {
// This expensive lookup should be delay until needed
String expensiveValue = Utilities.expensiveLookup("expensive key");
Workhorse.register("expensive helper", new Helper(expensiveValue, ...));
} catch (IOException ex) {
// This exception should be handled in `doHardwork()`
}
}
}
私は一度の問題のいずれか2を解決する方法を見つけ出す、すべてではありません4することができます。■Guiceのを使用して作成する必要が
Helper
、ないnew
expensiveLookup
はする必要があります が
IOException
がdoHardWork
- でキャッチして処理する必要があり、必要になるまで延期マップは、おそらく名前付きバインディングまたはマルチバインドで置き換えてください。これは私には難しい要件ではありませんが、それは正しいようです。
ヒントはありますか?
ヘルパーコンストラクタのvalue2とvalue3は何ですか?キーを介して検索する値ですか?またはそれらは実行時に任意ですか? –
これらも 'UserModule'で指定されていますが、単なる文字列です。ルックアップは必要ありません。 –