У меня есть набор модулей, и меня интересует, как я могу получить доступ к привязкам другого модуля во время создания модуля.
Я знаю, что можно сделать requireBinding
во втором модуле иполучить доступ к строке оттуда.Но это не тот интерфейс, который я получаю от внешней зависимости и, следовательно, не подлежит изменению.
Единственная альтернатива, которую я вижу, - это последовательно передавать ее всем модулям для обеспечения равного доступа.
См. Пример ниже:
package com.amazon.nlgeysercontrolplane.guice;
import com.google.inject.AbstractModule;
import com.google.inject.Injector;
import org.junit.Test;
import static com.google.inject.Guice.createInjector;
public class MultiModuleTest {
static class ChildModule2 extends AbstractModule {
String f;
public ChildModule2(final String f) { this.f = f; }
protected void configure() { }
}
static class ChildModule extends AbstractModule {
@Override
protected void configure() {
bind(String.class).toInstance("foobar");
}
}
@Test
public void testGuiceModules() {
Injector inj = createInjector(new AbstractModule(){
@Override
protected void configure() {
install(new ChildModule());
String f = binder().getProvider(String.class).get();
install(new ChildModule2(f));
}
});
}
}
Это исключение, которое я получаю (это согласуется с документацией).
Caused by: java.lang.IllegalStateException: This Provider cannot be used until the Injector has been created.
at com.google.common.base.Preconditions.checkState(Preconditions.java:173)
at com.google.inject.spi.ProviderLookup$1.get(ProviderLookup.java:102)
at com.google.inject.AbstractModule.configure(AbstractModule.java:62)
at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:340)
at com.google.inject.spi.Elements.getElements(Elements.java:110)
at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:138)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:104)
0.016