Załóżmy, że mam niektóre klasy Message
jak poniżej. (Jest to wymyślona klasa dla prostoty.)Guice wstrzykuje tylko niektóre konstruktory
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);
}
}
Ponieważ mam różne MessageSender
implementacje i chcieć testów jednostkowych to wysyłanie zdolność, myślę, że powinno być wstrzykiwanie MessageSender
w Message
„s send()
metody . Ale jak to zrobić?
Wszystkie przykłady Guice widziałem i że rozumiem wydają się zrobić zastrzyk w konstruktorze:
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);
}
}
Ale moja Message
klasa bierze w text
argumentu w jej konstruktora, który nie wiem chcesz wstrzyknąć. Więc co powinienem zrobić?
(Uwaga:.. Jestem kompletnym noobem Google Guice Chyba rozumiem Dependency Injection, ale nie rozumiem, jak to faktycznie wdrożyć go z Guice)