Предположим, у меня есть класс Message
, как показано ниже. (Это выдуманное класс для простоты.)Guice, впрыскивающий только часть конструктора
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
«s 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
аргумента в конструктор, который я не хотите впрыснуть. Так что же мне делать?
(Примечание.. Я полный Google Guice нуб Я думаю, я понимаю инъекции зависимостей, но я не понимаю, как на самом деле осуществить это с Guice)