Я довольно новичок в Guice, так что, надеюсь, это не очевидный вопрос ...
Я имею дело со структурой, которая динамически создает один из моих классов приложений (назовем его C
) используя отражение, поэтому я не имею никакого контроля над его созданием.Более того, у меня нет простого способа получить доступ к вновь созданному C
после того, как фреймворк его мгновенно запустил.Вот как выглядит C
:
public class C implements I {
public C() {
// this ctor is invoked by the framework so can't use DI here?
}
public void initialize() {
// this is a post instantiation hook which the f/w will invoke
}
private void m() {
Dependency d = Dependency.getInstance();
d.doSmth();
}
}
Я бы хотел, чтобы C
получил Dependency
, используя DI.Здесь Dependency
явно одноэлементный, но в общем случае это не обязательно.
Я предложил два возможных решения, ни одно из которых не выглядит очень опрятным, поэтому я решил спросить экспертов:
Статический впрыск.Я изо всех сил пытаюсь увидеть, как это значительно улучшается по сравнению с антишаблоном локатора службы - в итоге я получаю не окончательные статические поля, которыми можно манипулировать извне ... хммм.
Каркас поддерживаетхук для C
, чтобы инициализировать себя после создания (метод initialize()
, показанный выше).Этот метод может самостоятельно внедрить вновь созданный экземпляр, используя установку сеттера.
С 2, я думаю, это означает большую внешнюю изменяемость, но, по крайней мере, демонстрирует зависимость немного более явно для таких вещей, как unitтесты.Проблема в том, как мне в этом случае достать Guice Injector (если не полагаться на еще один сервисный локатор)?Я также прочитал (и склонен согласиться с этим), что явная ссылка на Инжектор в коде приложения - сомнительная практика.
Ваше понимание будет действительно оценено.
Большое спасибо,
Christian