2012-01-23 3 views
70

https://github.com/google/guice/wiki/AssistedInject을 읽었지만 AssistedInject 인수의 값을 전달하는 방법은 설명하지 않습니다. injector.getInstance() 호출은 어떻게 생겼을까요?Guice의 AssistedInject를 사용하는 방법?

+0

관련, 아래의 답변은 그 같은 종류는 여러 번 사용하는 경우를 커버하지 않습니다. https://stackoverflow.com/questions/23553865/using-assisted-inject-with-multiple-params-of-same-type-named-params – Alex

답변

127

FactoryModuleBuilder 클래스의 javadoc을 확인하십시오.

AssistedInject을 사용하면 직접 Factory을 코드화하는 대신 클래스로 구성 할 수 있습니다. 이는 삽입해야하는 종속성이있는 오브젝트와 오브젝트 작성 중에 지정해야하는 일부 매개 변수가있는 경우에 유용합니다. docummentaiton에서

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

인스턴스 생성시 개발자가 CreditServiceAuthService 및이 용기에 의해 분사해야하지만 startDate를하고 금액을 지정해야한다는 RealPayment A를 참조한다.

그래서 대신 Payment 당신이 주입되는 주입의 RealPayment

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

@Assisted으로 표시됩니다 그리고 공장

를 바인더 제본해야 매개 변수로 PaymentFactory
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

관련 문제