我感興趣什麼是正確的方式來構建具有@Assisted參數的依賴關係的對象。一個例子更好地說明:Guice 3 - 使用輔助注入時自動構建對象圖
Ordinarilly有沒有@Assisted
PARAMS的依賴,你可以簡單地擁有對象,所有他們之間的依賴與這些獲得注入沒問題的複雜層次結構,我就可以得到一個對象的實例和它的所有依賴關係都將被生成並注入,而無需執行任何操作。
但是,如果我想改變它,有些依賴的對象層次有@Assisted
PARAMS然後我要創建自己使用一個工廠,即那些實例:
public SomeConcreteService(@Assisted String string) {
this.string = string;
}
MyFactory myFactory = injector.getInstance(MyFactory .class);
SomeService myService = factory.getMyService("some string");
這將導致對清潔問題對象的實例化,因爲我將不得不手動創建這些實例。並將它們傳遞到所需的對象,這基本上呈現該對象的DI多餘我想?即然後,我會需要使用new
關鍵字,並通過手動所有依賴...
new MyComplexObject(myService, myOtherService)
如何讓這個我沒有手工打造的對象圖,如果一個或多個依賴關係使用@Assisted
參數?
我其實沒有真實世界的場景,我只是在想這件事。但是,即使「SomeConcreteService」不需要其他依賴關係,如果可以將其與Guice進行管理,可能仍然很好,例如,可以切換到另一個服務;只是想。 – Neilos
關於你的回答,我認爲大部分時間你的第一個例子就足夠了。主要的變化是:注入工廠,並有一些基本的'init()'方法來初始化依賴項(我假設它將在整個類中多次使用),或者如果只是使用了一次,那麼'doStuff )'方法就足夠了。所以我需要添加額外的邏輯來傳遞密鑰,就像你說的那樣可以理解。你的第二個例子,但我不認爲我完全理解,但我會花一些時間尋找它:) – Neilos