我對依賴注入感到困惑。我想要實現的是取代GlobalSettings.onStart()
調用,其中我初始化了2.3中的一些靜態單例對象,並對這些對象進行了適當的依賴注入。Play Framework 2.4 - 依賴注入替換GlobalSettings.onStart()
我所試圖做的是這樣的:
控制器 - >模型(注入對象到這個模型)
我至今是半路措施;控制器:
private static SomeObject myStaticSingletonObject = new SomeObject();
public Promise<Result> getSomeData() {
return handleRequest(() -> new SomeDataAjaxRequest(myStaticSingletonObject));
}
public Promise<Result> handleRequest(Function0<AbstractAjaxRequest<?>> supplier) {
Promise<AbstractAjaxRequest<?>> promise = Promise.promise(supplier);
return promise.map(arg -> ok(arg.getResponse()));
}
的handleRequest()是我使用自定義的方法,而不是真正相關的,但我有它的完整性:
和模型中我只取SomeObject作爲PARAM:
private final SomeObject someObject;
public SomeDataAjaxRequest(SomeObject someObject) {
super(null);
this.someObject = someObject;
}
在我build.sbt我:
routesGenerator := InjectedRoutesGenerator
所以基本上我的問題是如何守ld我將SomeObject注入到我的模型中,還應該如何創建我的SomeObject對象,我認爲我不應該使用new SomeObject()
。
理想情況下,我想爲這些對象使用字段注入,因爲我不想混淆實際上可能具有相關參數的構造函數,而不是僅僅包含這些包含事物定義的實用類(SomeObject基本上只是加載一些來自數據庫的信息在整個應用程序的整個生命週期中都是靜態的,但可能會改變)。
也可能值得注意的是,我打算使用Guice來管理DI。
據我所知,我應該創建一個Guice DI工廠,並已經看到了這個文檔,但我仍然不確定如何將它集成到我的遊戲應用程序中。
當我嘗試示例代碼在Play 2.4.2的這個答案的頂部,我得到了許多編譯器錯誤,比如「...模塊必須聲明爲抽象或實現configure()「。上面的代碼如何編譯?自從這篇文章發佈後,Play有了什麼變化?有什麼想法可以找到早期自我綁定的工作示例代碼? – devdanke
我剛剛注意到導入和超類是錯誤的 - 我已經糾正了這個例子 –
感謝您的反應如此之快我已經看到了一些早期的綁定例子,我認爲它們適用於Play 2.4.x.一些實現模塊,其他擴展AbstractModule。這兩種方法之間有什麼重要的區別嗎? – devdanke