Tôi đã đọc https://github.com/google/guice/wiki/AssistedInject , nhưng nó không cho biết cách chuyển các giá trị của đối số AssistedInject. Lệnh gọi injectionor.getInstance () trông như thế nào?
Tôi đã đọc https://github.com/google/guice/wiki/AssistedInject , nhưng nó không cho biết cách chuyển các giá trị của đối số AssistedInject. Lệnh gọi injectionor.getInstance () trông như thế nào?
Câu trả lời:
Kiểm tra javadoc của lớp FactoryModuleBuilder .
AssistedInjectcho phép bạn cấu hình động Factorycho lớp thay vì tự mã hóa nó. Điều này thường hữu ích khi bạn có một đối tượng có các phụ thuộc cần được đưa vào và một số tham số phải được chỉ định trong quá trình tạo đối tượng.
Ví dụ từ tài liệu là một RealPayment
public class RealPayment implements Payment {
@Inject
public RealPayment(
CreditService creditService,
AuthService authService,
@Assisted Date startDate,
@Assisted Money amount) {
...
}
}
Hãy xem điều đó CreditServicevà AuthServicenên được đưa vào bởi vùng chứa nhưng ngày bắt đầu và số lượng phải được chỉ định bởi nhà phát triển trong quá trình tạo phiên bản.
Vì vậy, thay vì tiêm một, Paymentbạn đang tiêm một PaymentFactoryvới các thông số được đánh dấu là @AssistedtrongRealPayment
public interface PaymentFactory {
Payment create(Date startDate, Money amount);
}
Và một nhà máy nên được ràng buộc
install(new FactoryModuleBuilder()
.implement(Payment.class, RealPayment.class)
.build(PaymentFactory.class));
Nhà máy đã cấu hình có thể được đưa vào các lớp của bạn.
@Inject
PaymentFactory paymentFactory;
và được sử dụng trong mã của bạn
Payment payment = paymentFactory.create(today, price);
RealPaymentkhông cần phải thực hiện một giao diện.