मैंने https://github.com/google/guice/wiki/AssistedInject पढ़ा है , लेकिन यह नहीं कहता है कि असिस्टेड इनजेक्ट के तर्कों के आधार पर कैसे पास किया जाए। इंजेक्टर.गेट इंन्सटेंस () कॉल कैसा दिखेगा?
मैंने https://github.com/google/guice/wiki/AssistedInject पढ़ा है , लेकिन यह नहीं कहता है कि असिस्टेड इनजेक्ट के तर्कों के आधार पर कैसे पास किया जाए। इंजेक्टर.गेट इंन्सटेंस () कॉल कैसा दिखेगा?
जवाबों:
FactoryModuleBuilder वर्ग के javadoc की जाँच करें ।
AssistedInjectआपको अपने आप को Factoryकोड करने के बजाय गतिशील रूप से कक्षा के लिए कॉन्फ़िगर करने की अनुमति देता है । यह अक्सर उपयोगी होता है जब आपके पास एक ऐसी वस्तु होती है जिसमें एक निर्भरता होती है जिसे इंजेक्ट किया जाना चाहिए और कुछ पैरामीटर जिन्हें ऑब्जेक्ट के निर्माण के दौरान निर्दिष्ट किया जाना चाहिए।
प्रलेखन से उदाहरण एक है RealPayment
public class RealPayment implements Payment {
@Inject
public RealPayment(
CreditService creditService,
AuthService authService,
@Assisted Date startDate,
@Assisted Money amount) {
...
}
}
देखें कि CreditServiceऔर AuthServiceकंटेनर द्वारा इंजेक्ट किया जाना चाहिए, लेकिन शुरुआत और राशि को एक निर्माता द्वारा उदाहरण के निर्माण के दौरान निर्दिष्ट किया जाना चाहिए।
तो बजाय एक इंजेक्शन लगाने की 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);
RealPaymentइंटरफ़ेस लागू करने की आवश्यकता नहीं है।