我读过https://github.com/google/guice/wiki/AssistedInject,但是没有说如何传递AssistedInject参数的值。 jector.getInstance()调用会是什么样?
最佳答案
检查FactoryModuleBuilder类的javadoc。AssistedInject
允许您动态地为类配置Factory
,而不是自己编写。当您的对象具有应注入(inject)的依赖项以及在对象创建期间必须指定的某些参数时,这通常很有用。
文档中的示例是RealPayment
public class RealPayment implements Payment {
@Inject
public RealPayment(
CreditService creditService,
AuthService authService,
@Assisted Date startDate,
@Assisted Money amount) {
...
}
}
看到
CreditService
和AuthService
应该由容器注入(inject),但是startDate和amount应该由开发人员在实例创建期间指定。因此,不是注入(inject)
Payment
,而是注入(inject)带有在PaymentFactory
中标记为@Assisted
的参数的RealPayment
。public interface PaymentFactory {
Payment create(Date startDate, Money amount);
}
工厂应该被 bundle
install(new FactoryModuleBuilder()
.implement(Payment.class, RealPayment.class)
.build(PaymentFactory.class));
可以将配置好的工厂注入(inject)您的类(class)中。
@Inject
PaymentFactory paymentFactory;
并在您的代码中使用
Payment payment = paymentFactory.create(today, price);