Tôi đã đọc https://github.com/google/guice/wiki/AssistedInject nhưng không nói cách chuyển giá trị của đối số AssistedInject. Lệnh gọi injector.getInstance() sẽ như thế nào?Làm thế nào để sử dụng Guice's AssistedInject?
70
A
Trả lời
127
Kiểm tra javadoc của lớp FactoryModuleBuilder.
AssistedInject
cho phép bạn định cấu hình động Factory
cho lớp thay vì tự viết mã. Điều này thường hữu ích khi bạn có một đối tượng có một phụ thuộc cần được tiêm và một số tham số phải được chỉ định trong khi tạo đối tượng.
Ví dụ từ docummentaiton là một RealPayment
public class RealPayment implements Payment {
@Inject
public RealPayment(
CreditService creditService,
AuthService authService,
@Assisted Date startDate,
@Assisted Money amount) {
...
}
}
Thấy rằng CreditService
và AuthService
nên được tiêm bằng container nhưng STARTDATE và số tiền phải được quy định bởi một nhà phát triển trong quá trình tạo ví dụ.
Vì vậy, thay vì tiêm một Payment
bạn đang tiêm một PaymentFactory
với các thông số được đánh dấu là @Assisted
trong RealPayment
public interface PaymentFactory {
Payment create(Date startDate, Money amount);
}
Và một nhà máy nên được binded
install(new FactoryModuleBuilder()
.implement(Payment.class, RealPayment.class)
.build(PaymentFactory.class));
nhà máy cấu hình có thể được tiêm vào các lớp học của bạn.
@Inject
PaymentFactory paymentFactory;
và được sử dụng trong mã của bạn
Payment payment = paymentFactory.create(today, price);
Các vấn đề liên quan
- 1. Làm thế nào để sử dụng inotify?
- 2. Làm thế nào để sử dụng Parcel.readBooleanArray()?
- 3. Làm thế nào để sử dụng Resources.getFraction()?
- 4. Làm thế nào để sử dụng ReadWriteLock?
- 5. làm thế nào để sử dụng glCopyImage2D
- 6. Làm thế nào để sử dụng paramiko.RSAKey.from_private_key()?
- 7. Làm thế nào để sử dụng MonadRandom?
- 8. Làm thế nào để sử dụng SqlCacheDependency?
- 9. Làm thế nào để sử dụng sprof?
- 10. Làm thế nào để sử dụng SqlBulkCopyColumnMappingCollection?
- 11. Làm thế nào để sử dụng FileDialog?
- 12. Làm thế nào để sử dụng java.net.URI
- 13. Làm thế nào để sử dụng AutoMapper?
- 14. Làm thế nào để sử dụng Git?
- 15. Làm thế nào để sử dụng TDictionary?
- 16. Làm thế nào để sử dụng Ant?
- 17. Làm thế nào để sử dụng NSScanner?
- 18. Làm thế nào để sử dụng grails.plugin.location?
- 19. Làm thế nào để sử dụng bitmask?
- 20. Làm thế nào để sử dụng DataProtectionProvider?
- 21. Làm thế nào để sử dụng Deblector?
- 22. Làm thế nào để sử dụng cepstral?
- 23. Làm thế nào để sử dụng PyBrain?
- 24. Làm thế nào để sử dụng QMutex?
- 25. Làm thế nào để sử dụng pthread_mutex_trylock?
- 26. Làm thế nào để làm cho SQLAlchemy sử dụng Memcached?
- 27. Làm thế nào để sử dụng fiddler để gỡ lỗi?
- 28. làm thế nào để sử dụng sox để nén mp3?
- 29. Làm thế nào để sử dụng và khi nào là memmove sử dụng tốt trong C?
- 30. Làm thế nào để sử dụng Crystal Reports với ASP.NET?
liên quan, các câu trả lời dưới đây không bao gồm trường hợp ông cùng loại được sử dụng nhiều lần. https://stackoverflow.com/questions/23553865/using-assisted-inject-with-multiple-params-of-same-type-named-params – Alex