4

只有当它在当前范围内可用时,我才需要注入一个字段,否则为空。例如:

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) {}

只是感觉很不对劲。有没有合适的方法来做到这一点?

4

1 回答 1

3

究竟是什么决定了您的课程可用?HttpServletRequest 在某种程度上对我来说是违反直觉的,因为在非请求范围的服务中没有请求对我来说听起来像是一个错误。

一个想法(通常)是使用 get/set 方法为 Holder 编写自定义提供程序。在提供程序中,您可以运行检查,无论您的事物在当前范围内是否可用,它始终返回您需要的类型的 Holder,但根据可用的事物,它可能为空/null。由于您总是返回一个支架,因此注射器应该没问题。您只需要检查要注入它的组件中的 null 即可。

希望这可以帮助。

于 2011-01-29T16:24:25.927 回答