Возможно, переопределяющие модули могут вам помочь. Уровень по умолчанию можно настроить с помощью модуля AppLevel
:
public class AppModule extends AbstractModule {
@Override
public void configure() {
bind(Level.class).toInstance(Level.NORMAL);
// other bindings
}
}
и конкретный можно настроить в небольшом переопределяющем модуле:
public class FancyLevelModule extends AbstractModule {
@Override
public void configure() {
bind(Level.class).toInstance(Level.FANCY);
}
}
В конце просто создайте инжектор, перекрывающий AppModule
с определенной Level
конфигурацией:
public static void main(String[] args) {
Injector injector =
Guice.createInjector(
Modules.override(new AppModule()).with(new FancyLevelModule())
);
System.out.println("level = " + injector.getInstance(Level.class));
}
UPDATE
Эта проблема может быть решена немного по-другому. Допустим, что Level
используется в классе как внедренное поле:
class Some
{
@Injected(optional = true)
private Level level = Level.NORMAL;
}
Уровень по умолчанию будет инициализирован как часть создания экземпляров Some
. Если какой-либо модуль конфигурации Guice объявляет какой-то другой уровень, он может быть добавлен по желанию.