Search code examples
javadependency-injectionguice

How to inject Injector?


Situation: i need lazy dependency instantiation in some FooClass, so i pass Injector to class as a constructor parameter.

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

But guice doesn't permit to bind core classes (injectors, modules and etc). What is the solution?


Solution

  • You should not be using the Injector directly. Rather pass in the Provider<FooClass> instead. Also, you should be injecting the provider in the places where you use FooClass.

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