ตรวจสอบ javadoc ของคลาสFactoryModuleBuilder
AssistedInject
ช่วยให้คุณกำหนดค่าFactory
คลาสแบบไดนามิกแทนที่จะเข้ารหัสด้วยตัวเอง สิ่งนี้มักมีประโยชน์เมื่อคุณมีวัตถุที่มีการอ้างอิงที่ควรฉีดและพารามิเตอร์บางอย่างที่ต้องระบุในระหว่างการสร้างวัตถุ
ตัวอย่างจากเอกสารคือไฟล์ RealPayment
public class RealPayment implements Payment {
@Inject
public RealPayment(
CreditService creditService,
AuthService authService,
@Assisted Date startDate,
@Assisted Money amount) {
...
}
}
ดูนั่นCreditService
และAuthService
ควรได้รับการฉีดโดยภาชนะ แต่ StartDate และจำนวนเงินควรมีการระบุโดยนักพัฒนาในระหว่างการสร้างอินสแตนซ์
ดังนั้นแทนที่จะฉีด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);