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 .
AssistedInject
cho phép bạn cấu hình động Factory
cho 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 đó CreditService
và AuthService
nê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, Payment
bạn đang tiêm một PaymentFactory
với các thông số được đánh dấu là @Assisted
trongRealPayment
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);
RealPayment
không cần phải thực hiện một giao diện.