Noe*_*Yap 79 java guice guice-3
我已阅读https://github.com/google/guice/wiki/AssistedInject,但它没有说明如何传递AssistedInject参数的值.injector.getInstance()调用会是什么样的?
Mai*_*kov 153
检查FactoryModuleBuilder类的javadoc .
AssistedInject允许您动态配置Factory类而不是自己编码.当您拥有一个具有应该注入的依赖项的对象以及在创建对象期间必须指定的某些参数时,这通常很有用.
文档中的示例是a RealPayment
public class RealPayment implements Payment {
@Inject
public RealPayment(
CreditService creditService,
AuthService authService,
@Assisted Date startDate,
@Assisted Money amount) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
看到它CreditService并且AuthService应该由容器注入,但startDate和amount应该由开发人员在实例创建期间指定.
因此,而不是注入Payment你注入PaymentFactory与被标记为参数@Assisted的RealPayment
public interface PaymentFactory {
Payment create(Date startDate, Money amount);
}
Run Code Online (Sandbox Code Playgroud)
一个工厂应该绑定
install(new FactoryModuleBuilder()
.implement(Payment.class, RealPayment.class)
.build(PaymentFactory.class));
Run Code Online (Sandbox Code Playgroud)
配置的工厂可以在您的课程中注入.
@Inject
PaymentFactory paymentFactory;
Run Code Online (Sandbox Code Playgroud)
并在您的代码中使用
Payment payment = paymentFactory.create(today, price);
Run Code Online (Sandbox Code Playgroud)