Я новичок в Google Guice и нуждаюсь в небольшой помощи. Я создал модуль вроде этого:Как создать экземпляр реализации в Google Guice
public interface Foo {
Bar doSomething();
}
public class MyFoo implements Foo {
Bar doSomething() {
// create an instance of MyBar
}
}
public interface Bar {
void run();
}
public interface MyBar implements Bar {
void run();
}
public class MyModule extends AbstractModule {
@Override
protected void configure() {
bind(Foo.class).to(MyFoo.class);
}
}
Мой вопрос: Что такое правильный способ создать экземпляр MyBar в классе «MYFOO»? Он чувствует себя не так, чтобы просто сделать это:
public class MyFoo implements Foo {
Bar doSomething() {
MyBar mybar = new MyBar();
return mybar;
}
}
Есть ли способ, чтобы придать новый экземпляр MyBar по MyModule, когда мне нужно одно, или я должен вводить завод в конструкторе MyBar для создания MyBar экземпляров ? Если мне нужно использовать фабрику, могу ли я контролировать, какая реализация генерируется через модуль?
Именно то, что я искал. Спасибо – stebeg
Стоит отметить, что это первый шаг к обработке сложного жизненного цикла в виде. Вы могли бы оказаться в будущем, используя больше поставщиков и столкнуться с трудностями (я сделал). Две ключевые вещи, которые разрешили мои проблемы, - это «@ Assisted» (если вам нужно позвонить провайдеру, но вам также необходимо предоставить этому провайдеру какой-то контекст (например, args), чтобы помочь понять проблему зависимости) и явный метод провайдера, (https://github.com/google/guice/wiki/ProvidesMethods), когда вам нужно сделать больше, чем просто вызвать вызов конструктора (запись здесь, похоже, является общей проблемой) – Groostav