關於Guice的問題。我仍然在學習它,但我可以理解基礎知識。Guice運行時依賴關係參數回注
這個問題已經在網上問了幾次,但從來沒有一個具體的答案(我找不到)。
說我有一個像圖片的情況(一個類似的例子有些在網上)。
public class Dog {}
public class Walk implements Walkable {
private final Dog dog;
private final boolean leash;
@Inject
public Walk(Dog dog, @Assisted boolean leash) {
this.dog = dog;
this.leash = leash;
}
public void go() {
}
}
public interface Walkable {
void go();
}
public interface WalkFactory {
Walk create(boolean leash);
}
public class AssistedMain {
public static void main(String[] args) {
Injector i = Guice.createInjector(new AbstractModule() {
protected void configure() {
install(new FactoryModuleBuilder().
implement(Walkable.class, Walk.class).
build(WalkFactory.class));
}
});
Walk walk = i.getInstance(WalkFactory.class).create(true);
}
}
這是所有偉大的。但問題是 - 我能否以某種方式將該對象實例重新注入到「容器」(注入器)中,以用於依賴此依賴關係的類。
因此,讓我們添加一個interface Person
,class PersonImpl
。
新類來源是:
public interface Person {
void walkDog();
}
public class PersonImpl implements Person {
private Walkable walkable;
@Inject
public PersonImpl(Walkable walkable) {
this.walkable = walkable;
}
public void setWalkable(Walkable walkable) {
this.walkable = walkable;
}
public void walkDog() {
walkable.go();
}
}
所以,問題是 - 我是,不知何故能這種特定情況下實際注入到要添加的對象。這是一個簡單的例子,但我們可以假定在這個下面有10個級別的類。
我找到的解決方案不是很靈活。喜歡的東西:
Injector i = Guice.createInjector(new SimpleModule(false, dog));
,然後綁定到具體的實例。這不是很有活力。基本上,每次我需要不同的運行時間/動態參數時,我都必須重新創建噴油器。
Provider<T>
很好,FactoryModuleBuilder
幫助,但我怎麼能注入對象回來?
有沒有更多的動態解決這個問題?
謝謝。
對我有意義。 – mpierce