2012-01-23 2 views
70

Я читал https://github.com/google/guice/wiki/AssistedInject, но он не говорит, как передать значения аргументов AssistedInject. Как выглядел бы вызов injector.getInstance()?Как использовать AssiceInject Guice?

+0

связаны, приведенные ниже ответы не охватывает случаи, когда он же типа используется несколько раз. https://stackoverflow.com/questions/23553865/using-assisted-inject-with-multiple-params-of-same-type-named-params – Alex

ответ

127

Проверьте javadoc FactoryModuleBuilder класс.

AssistedInject позволяет динамически настраивать Factory для класса вместо его кодирования. Это часто полезно, когда у вас есть объект, у которого есть зависимости, которые должны быть введены, и некоторые параметры, которые должны быть указаны при создании объекта.

Пример из docummentaiton является RealPayment

public class RealPayment implements Payment { 
    @Inject 
    public RealPayment(
     CreditService creditService, 
     AuthService authService, 
     @Assisted Date startDate, 
     @Assisted Money amount) { 
    ... 
    } 
} 

Смотрите, CreditService и AuthService следует вводить с помощью контейнера, но StartDate и сумма должна быть указана разработчиком в процессе создания экземпляра.

Так вместо того, чтобы впрыскивать Payment вы нагнетание PaymentFactory с параметрами, которые помечены как @Assisted в RealPayment

public interface PaymentFactory { 
    Payment create(Date startDate, Money amount); 
} 

И завод должен быть переплетены

install(new FactoryModuleBuilder() 
    .implement(Payment.class, RealPayment.class) 
    .build(PaymentFactory.class)); 

Настроенные завод может быть введен в ваши классы.

@Inject 
PaymentFactory paymentFactory; 

и используется в коде

Payment payment = paymentFactory.create(today, price); 
+6

Многого не хватило и не смог найти более краткое и ясное объяснение моей сомнения. Большое спасибо – Gabber

+11

Это проще понять, чем документация на Github. Отлично сработано. – arjabbar

+5

Документация Github - это дерьмо по сравнению с этим. – EMM

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