Guice Custom Injection для параметров конструктора

Я прочитал о Custom Injection в Guice здесь: https://github.com/google/guice/wiki/CustomInjections

Эта схема описывает, как вы можете создать MembersInjector для внедрения полей класса. Я могу сделать это успешно. Однако мне не нравится идея внедрения поля, и я хотел бы сделать это, чтобы ввести параметры конструктора.

Кто-нибудь знает, как этого можно добиться для внедрения конструктора?

Конкретно:

public class PaymentService {
  private final Logger logger;

  @Inject public PaymentService(@InjectLogger(type="log4j") final Logger logger){
       //the @InjectLogger is the injection point
  }


  ...
}

В документации MembersInjector говорится: «внедрять зависимости в поля и методы типа T»: http://google.github.io/guice/api-docs/latest/javadoc/index.html?com/google/inject/MembersInjector.html

Кажется, это указывает на то, что это должно быть возможно сделать. Любые идеи?

Кроме того, чтобы уточнить, мне нужно использовать пользовательскую инъекцию, потому что у меня нет привязки во время разработки. Мне нужно привязать регистратор во время выполнения на основе атрибута в моей аннотации из конфигурации. Я также не могу перебрать все мои ключи конфигурации.


person Krishnamurthy    schedule 11.12.2015    source источник
comment
Похоже, вы говорите о провайдерах, которые позволяют вам решать во время выполнения, как выполнить данную зависимость, или же о областях, которые предоставляют вам средства определения уровней, на которых общие зависимости. Думали ли вы об использовании любого из этих шаблонов? github.com/google/guice/wiki/ProviderBindings , github.com/google/guice/wiki/Scopes   -  person sisyphus    schedule 11.12.2015
comment
На самом деле у меня есть аннотация со строковым параметром. Поэтому я не могу выполнить привязку во время разработки. Поэтому я вынужден использовать пользовательскую инъекцию с помощью TypeListener. Редактирование фрагмента кода, чтобы показать это.   -  person Krishnamurthy    schedule 11.12.2015
comment
@Krishnamurthy Вы не можете выполнять пользовательскую инъекцию для параметров конструктора, только для полей и методов.   -  person Tavian Barnes    schedule 16.12.2015
comment
@TavianBarnes Теперь я это понимаю. Мне потребовалось некоторое время, чтобы прочитать много документации, чтобы понять это. Огорчает меня.   -  person Krishnamurthy    schedule 22.12.2015