मान लीजिए कि मेरे पास कुछ Message
वर्ग निम्न हैं।गिइस इंजेक्शन केवल कुछ कन्स्ट्रक्टर
public class Message {
private String text;
public Message(String text) {
this.text = text;
}
public void send(Person recipient) {
// I think I should be Guice-injecting the sender.
MessageSender sender = new EmailBasedMessageSender();
sender.send(recipient, this.text);
}
}
(इस सादगी के लिए एक बना हुआ वर्ग है।) के बाद से मैं अलग MessageSender
कार्यान्वयन है, और इकाई परीक्षण इस भेजने की क्षमता है, मुझे लगता है कि मैं इंजेक्शन लगाने की जानी चाहिए MessageSender
Message
के में send()
विधि करने के लिए चाहते हो सकता है । लेकिन मैं यह कैसे करूँ?
सभी Guice उदाहरण मैंने देखा है और मैं समझता हूँ कि निर्माता में इंजेक्शन करने के लिए लग रहे हैं:
public class Message {
private String text;
private MessageSender sender;
// ??? I don't know what to do here, since the `text` argument shouldn't be injected.
@Inject
public Message(String text, MessageSender sender) {
this.text = text;
this.sender = sender;
}
public void send(Person recipient) {
this.sender.send(recipient, this.text);
}
}
public class MessageSenderModule extends AbstractModule {
@Override
protected void configure() {
bind(MessageSender.class).to(EmailBasedMessageSender.class);
}
}
लेकिन मेरे Message
वर्ग अपनी निर्माता में एक text
बहस में ले जाता है, जो मैं नहीं इंजेक्ट करना चाहते हैं। तो मुझे इसके बजाय क्या करना चाहिए?
(नोट:।। मैं एक पूरी गूगल Guice noob हूँ मुझे लगता है कि मैं निर्भरता इंजेक्शन समझते हैं, लेकिन मुझे समझ नहीं आता कि कैसे वास्तव में Guice के साथ इसे लागू करने के)