Come iniettare l'iniettore?

2022-07-29 13:30:32

Situazione: ho bisogno di un'istanza di dipendenza pigra in alcuni FooClass, quindi passo Injector alla classe come parametro costruttore.

private final Injector m_injector;
    
public FooClass(@Named("FooInjector") Injector injector) {
    m_injector = injector;
}

Ma guice non permette di associare classi di base (iniettore, moduli e così via). Qual è la soluzione?

- Alex M

Source
Risposta


31
  • Non dovresti utilizzare direttamente Injector. Piuttosto passa in Provider<FooClass> invece. Inoltre, dovresti iniettare il provider nei luoghi in cui usi FooClass.

    private final Provider<FooClass> provider;
    
    @Inject
    public ClassWhereFooIsUsed(Provider<FooClass> provider) {
        this.provider = provider;
    }
    
    .... somewhere else
    FooClass f = provider.get(); // This is lazy