現在のスコープで使用できる場合にのみフィールドを挿入する必要があり、それ以外の場合は null を挿入する必要があります。例えば:
public class Thinger implements Provider<SomeSuch> {
public @Inject(optional=true) HttpServletRequest request;
public SomeSuch get() {
return request == null ? new WhosIt() : WhatsIt();
}
}
ただし、HttpServletRequest がバインドされている (つまり) スコープ内にない場合、ProvisioningException が発生します。私はこれを行うエレガントな方法を見つけることができたので、次のようなことをするように追いやられています。
HttpServletRequest request = null;
try {
request = injector.getInstance(HttpServletRequest.class);
} catch(ProvisioningException e) {}
これは、あらゆる方法で間違っていると感じています。これを行う適切な方法はありますか?