2017-02-12 1 views
2

В the official document вы можете увидеть это предложение.Что такое MembersInjectors в Guice?

При привязке к поставщикам или расширению письма вы можете захотеть, чтобы Guice вводил зависимости в объект, который вы создаете самостоятельно. Для этого добавьте зависимость от MemberInjector (где T - тип вашего объекта), а затем вызовите membersInjector.injectMembers (myNewObject).

Я не понимаю всю картину использования MembersInjector. Если вы хотите, чтобы Guice вводил некоторые экземпляры в объект, который вы хотите создать, полезно просто создать соответствующие привязки. Итак, когда вы используете этот MemebersInjector? Даже если вы хотите использовать поставщиков, таких как bind().toProvider(), почему бы нам не использовать MembersInjector?

Может ли кто-нибудь объяснить?

ответ

2

Ключевыми словами здесь являются «то, что вы строите сами».

Для bind(A.class).to(B.class), Guice создает экземпляр B сам и вводит его в соответствии с его @Inject конструктора, методов и полей. Однако в некоторых случаях вам может понадобиться получить экземпляр из другого места, кроме Guice. Это может быть в тех случаях, когда конструкторы могут не легко принимать дополнительные параметры, например, в Eclipse SWT, или когда экземпляры автоматически создаются, как в Java serialization, Google GSON, Apache Crunch или в любом другом случае, когда экземпляры создаются вне вашего контроля.

В этих случаях, а не getInstance(YourClass.class) или getProvider(YourClass.class), вы хотите, чтобы Guice выполнить все возможное введение на примере у вас уже есть. Здесь находится MembersInjector: вы можете ввести MembersInjector<YourClass> везде, где вам это нужно, или вы можете использовать Injector.getMembersInjector, чтобы создать произвольный MemberInjector на основе класса или TypeLiteral.

+0

Спасибо, очень полезный ответ. Однако методы, которые вы упомянули, 'getInstance (YourClass.class)' и 'getProvider (YourClass.class)', являются методами Guice? –

+0

Да, это методы на инжекторе, эквивалентные инъекции 'T' или' Provider 'внутри вашего графика. –

Смежные вопросы