簡體   English   中英

DI或服務定位器:在運行時在scala中注入實現(無靜態綁定)

[英]DI or Service Locator : Injecting implementations at run-time ( no static binding ) in scala

我有一個用例,我想提供一個簡單的API來擴展我的Scala應用程序的功能。

我花了最后兩天的時間來尋找一個對我有幫助的java / scala DI框架或庫:

  1. 標識類路徑上接口/特征的實現
  2. 在標記的站點上實例化並注入所述實現(重要功能:全部),最好帶有注釋
  3. 上面的事情不可能在編譯器中發生,因為我需要一個插件架構,在JVM啟動之前不引入插件
  4. 因此,以上情況可在JVM啟動時發生(無需熱插拔)

我越來越喜歡OSGi DS,我非常喜歡OSGi DS,但由於#4,我認為它是一種過大的殺傷力。

我看着guice,weld,scaladi和macwire,卻無法立即看到執行此操作的簡單方法。 我的目標是使“插件”作者不必以任何方式了解我的注入/ IoC解決方案,除了偶爾的注解(最好是JSR330),我願意在注入站點處理較丑的事情。 :-)

我是否需要在這里推出自己的解決方案,使用OSGi,還是在上述庫中缺少一些瑣碎的東西?

ps:我之所以試圖避開OSGi,主要是因為它與我正在使用的應用程序框架進行了交互(akka-不確定bundle / DS生命周期是否與單個actor系統很好地融合在一起)

現在,我看一下Scaldi提供的功能。 我發現它已經足夠成熟。 因此,使用該DI庫實現您的目標並不困難。 例如,您只能實現用於在某些配置文件或其他任何文件中特別注釋/指定的搜索代碼。

如果您喜歡DS(並且似乎非常適合您的問題),那么為什么不解決Akka的任何問題呢? 我很確定其他人也會樂於助人,因為它看起來像是一個有趣的組合。

如果您能夠負擔得起,那么最好與Peter的建議一起使用(不僅對您自己,而且對整個生態系統而言)

從實用的角度來說,Java具有OOTB附帶的SPI ,對於您的特定情況,它可能是最簡單的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM