簡體   English   中英

Guice中可選的Scoped注射

[英]Optional Scoped injection in Guice

我只需要在當前作用域中可用時注入一個字段,否則返回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) {}

這只是感覺各種各樣的錯誤。 有沒有正確的方法來做到這一點?

究竟是什么決定了你的課程? HttpServletRequest在某種程度上違反直覺,因為在非請求范圍的服務中沒有請求對我來說聽起來像是一個錯誤。

一個想法(通常)是僅使用get / set方法為持有者編寫自定義Provider。 在提供程序中,您可以運行檢查,無論您的Thing是否在當前作用域中可用,它始終返回您需要的類型的Holder,但它可能為空/ null,具體取決於可用的東西。 由於您總是返回一個持有人,注射器應該沒問題。 您只需要在注入此組件的組件中檢查null。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM