मैंने 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
इंटरफ़ेस लागू करने की आवश्यकता नहीं है।