我读过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) {
     ...
   }
 }

看到CreditServiceAuthService应该由容器注入(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);

07-26 01:05