Мне было интересно, есть ли способ в Guice переопределить привязку с помощью прослушивателей или перехватчиков, прежде чем он будет создан.Перезаписать конкретное связывание guice через перехватчик или прослушиватель или препроцессор
Мой сценарий:
У меня есть модуль А, который связывает клиента, например:
public static class ProdModule extends AbstractModule {
@Override
protected void configure() {
bind(Client.class).toInstance(ClientBuilder.newBuilder().build());
}
}
Это обязательные потребности быть высмеивал. Поэтому я хотел бы, чтобы тест добавил новый модуль, который регистрирует Listener (или что-то еще), так что, когда Guice пытается решить эту привязку, я могу заменить ее любым необходимым связыванием.
Я знаю о Modules.override(...)
, однако это не может использоваться с моей настройкой. Код, создающий экземпляр Инжектора, похоронен в зависимости, по существу. У меня нет доступа к изменению кода для использования перезаписываемых модулей, однако я могу добавить столько новых модулей, сколько захочу.
Я не хочу заменять весь модуль и вообще не хочу изменять код модуля.
Я пытался несколько вещей, которые либо не работают, или я не знаю, как их использовать:
Я попытался с помощью ProvisionListener
. Это работало «несколько». Я мог бы перезаписать конкретного поставщика, используя отражение и изменение поля результата в Provision. Это не работает, например, привязки.
Я пробовал использовать ElementVisitor
и BindingTargetVisitor
, однако они ничего не сделали для меня. Возможно, я не понимаю, в чем заключается цель этих двух посетителей, и я не нашел слишком много документации или примеров.
От того, как вы описали свои ограничения, нет никакого способа сделать это. –
@TavianBarnes спасибо. Я боялся, что это так. В настоящее время я пытаюсь обойти свои ограничения, чтобы использовать Modules # override – pandaadb
"* Я не хочу заменять весь модуль и не хочу вообще изменять код модуля. *" - почему бы и нет? Разве это не ваш код? Или вы просто пытаетесь избежать рефакторинга своих модулей? – dimo414