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?
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