https://github.com/google/guice/wiki/AssistedInjectを読みましたが、AssistedInject引数の値を渡す方法が記載されていません。インジェクター.getInstance()の呼び出しはどのようになりますか?
https://github.com/google/guice/wiki/AssistedInjectを読みましたが、AssistedInject引数の値を渡す方法が記載されていません。インジェクター.getInstance()の呼び出しはどのようになりますか?
回答:
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
次のPaymentFactory
よう@Assisted
にマークされたパラメータを使用してを注入します。RealPayment
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);
RealPayment
ために、インターフェースを実装する必要はありません。