我读过https://github.com/google/guice/wiki/AssistedInject,但它没有说明如何传递AssistedInject参数的值。injector.getInstance()调用会是什么样子呢?
发布于 2012-01-24 05:51:53
检查FactoryModuleBuilder类的javadoc。
AssistedInject
允许您为类动态配置Factory
,而不是自己编码。当您的对象具有应该注入的依赖项以及在创建对象期间必须指定的某些参数时,这通常很有用。
文档中的示例是RealPayment
public class RealPayment implements Payment {
@Inject
public RealPayment(
CreditService creditService,
AuthService authService,
@Assisted Date startDate,
@Assisted Money amount) {
...
}
}
注意CreditService
和AuthService
应该由容器注入,但startDate和amount应该由开发人员在实例创建过程中指定。
因此,不是注入Payment
,而是使用在RealPayment
中标记为@Assisted
的参数注入PaymentFactory
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);
https://stackoverflow.com/questions/8976250
复制相似问题