首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Guice的AssistedInject?

如何使用Guice的AssistedInject?
EN

Stack Overflow用户
提问于 2012-01-24 01:53:20
回答 1查看 39.4K关注 0票数 90

我读过https://github.com/google/guice/wiki/AssistedInject,但它没有说明如何传递AssistedInject参数的值。injector.getInstance()调用会是什么样子呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-24 05:51:53

检查FactoryModuleBuilder类的javadoc。

AssistedInject允许您为类动态配置Factory,而不是自己编码。当您的对象具有应该注入的依赖项以及在创建对象期间必须指定的某些参数时,这通常很有用。

文档中的示例是RealPayment

代码语言:javascript
复制
public class RealPayment implements Payment {
   @Inject
   public RealPayment(
      CreditService creditService,
      AuthService authService,
      @Assisted Date startDate,
      @Assisted Money amount) {
     ...
   }
 }

注意CreditServiceAuthService应该由容器注入,但startDate和amount应该由开发人员在实例创建过程中指定。

因此,不是注入Payment,而是使用在RealPayment中标记为@Assisted的参数注入PaymentFactory

代码语言:javascript
复制
public interface PaymentFactory {
    Payment create(Date startDate, Money amount);
}

一个工厂应该被绑定

代码语言:javascript
复制
install(new FactoryModuleBuilder()
     .implement(Payment.class, RealPayment.class)
     .build(PaymentFactory.class));

可以将已配置的工厂注入到您的类中。

代码语言:javascript
复制
@Inject
PaymentFactory paymentFactory;

并在您的代码中使用

代码语言:javascript
复制
Payment payment = paymentFactory.create(today, price);
票数 185
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8976250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档