91

https://github.com/google/guice/wiki/AssistedInjectを読みましたが、 AssistedInject 引数の値を渡す方法については述べていません。inspector.getInstance() 呼び出しはどのようになりますか?

4

1 に答える 1

189

FactoryModuleBuilderクラスの javadoc を確認してください。

AssistedInjectFactory自分でコーディングする代わりに、クラスを動的に構成できます。これは、注入する必要がある依存関係と、オブジェクトの作成中に指定する必要があるいくつかのパラメーターを持つオブジェクトがある場合に役立ちます。

ドキュメントの例はRealPayment

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

とはコンテナーによって注入される必要がCreditServiceありAuthServiceますが、インスタンスの作成時に開発者が startDate と amount を指定する必要があります。

したがって、 a を注入する代わりに、次のようにマークされているパラメーターを使用してaをPayment注入していますPaymentFactory@AssistedRealPayment

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);
于 2012-01-23T21:51:52.727 に答える