Aşağıdaki gibi bazı Message
sınıfına sahip olduğumu varsayalım. (Bu basitlik için uydurma bir sınıftır.)Yalnızca yapıcıdan bazılarını enjekte eden kılavuz
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);
}
}
farklı MessageSender
uygulamaları var ve birim testi bu gönderme yeteneği, ben MessageSender
Message
's send()
yöntemi enjekte edilmesi gerektiğini düşünüyorum isteyebilirsiniz yana . Ama bunu nasıl yaparım?
gördüğüm tüm Guice örnekler
ve Kurucuda enjeksiyon yapmak gibi görünüyor anlamaları: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);
}
}
Ama Message
sınıf I do not, hangi onun kurucu bir text
argüman alır enjekte etmek istiyorum. Öyleyse bunun yerine ne yapmalıyım?
(Not:.. Ben bağımlılık enjeksiyon anlıyorum komple Google Guice çaylak değilim, ama aslında Guice ile nasıl uygulanacağı konusu anlamıyorum)
Sen sağlamak için enjeksiyon destekli kullanabilir olabilir