package ru.vyarus.dropwizard.guice.module.jersey.support; import com.google.inject.Injector; import org.glassfish.hk2.api.ServiceLocator; import javax.inject.Provider; /** * Lazy "bridge" used to register hk types in guice context. Guice context is created before hk, * so such lazy binding is the only way to register types properly. * <p>Provider used on stage when hk context is not started and guice context is gust starting, * so both injectors resolved lazily.</p> * * @param <T> injection type * @see ru.vyarus.dropwizard.guice.injector.lookup.InjectorProvider */ public class JerseyComponentProvider<T> implements Provider<T> { private final Provider<Injector> injector; private final Class<T> type; public JerseyComponentProvider(final Provider<Injector> injector, final Class<T> type) { this.injector = injector; this.type = type; } @Override public T get() { return injector.get().getInstance(ServiceLocator.class).getService(type); } }