Какая польза от requireBinding? - PullRequest
1 голос
/ 02 июля 2019

Я относительно новичок в Guice и пытаюсь понять использование requireBinding и когда / почему его использовать.

Насколько я понимаю, при создании инжектора Guice просматривает код метода configure () всех модулей и строит граф зависимостей.

Если Guice строит граф зависимостей сам по себе, то зачем модулю добавлять requireBinding? Пока я мог понять, что использование requireBinding заключается в добавлении явной зависимости к классу, который граф зависимости guice, похоже, делает в любом случае.

Я хотел бы понять, когда мы должны использовать requireBinding и каково его отсутствие в модуле.

Я прочитал официальную документацию Guice и выполнил поиск по всем существующим вопросам в Stackoverflow / любом другом блоге, но не смог найти удовлетворительный ответ на вышеуказанный вопрос.

Добавление к исходному вопросу.

Глядя на исходный код AbstractModule, реализация выглядит как

protected void requireBinding(Key<?> key) {
    this.binder().getProvider(key);
}

protected void requireBinding(Class<?> type) {
    this.binder().getProvider(type);
}

То, что вы предполагаете, не будет иметь никакого побочного эффекта, так как это вызов "get". Но с другой стороны, глядя на это связующее устройство, оно добавляет какой-то элемент в список элементов типа ProviderLookup

public <T> Provider<T> getProvider(Dependency<T> dependency) {
        ProviderLookup<T> element = new ProviderLookup(this.getElementSource(), dependency);
        this.elements.add(element);
        return element.getProvider();
    }

1 Ответ

1 голос
/ 10 июля 2019

Я всегда требовал requireBinding () в качестве контракта для модуля.

Вы правы, что график в конечном итоге потерпит неудачу, когда вы вызовете #get() или попытаетесь внедрить объект, который зависит от привязки. Тем не менее, я считаю, что requireBinding вызовет сбой при создании Инжектора по сравнению с созданием объекта (через Инжектор). Когда я работал в Google, он действовал больше как контракт, а не как нечто с последующим поведением.

...