簡體   English   中英

動態依賴注入

[英]Dynamic dependency injection

我想實現動態依賴注入。 GUICE支持嗎? 如果不能,您是否可以推薦任何其他DI框架?

必須在運行時(例如,通過與用戶交互)確定應通過@Inject進行注入的實現。

與以下問題類似: http : //www.panz.in/2008/12/dynamic-dependency-injection.html http://www.panz.in/2008/12/dynamic-dependency-injection.html

謝謝

實現需要根據輸入而有所不同,在某些時候,您將不得不將輸入解析為某種類。

如果您希望該映射存在於Guice中,那么您基本上就可以獲得基於參數的實現,該實現映射到我在這里剛剛回答的SO問題 您可以編寫一個小的可注入類,該類接受輸入並返回完全注入的實現。

如果您已經具有該映射並且在變量中具有(例如)類文字,則可以直接注入Injector並要求其實現。

class YourClass {
  @Inject Injector injector;

  SomeInterface yourMethod(String input) {
    Class<? extends SomeInterface> clazz = getClassLiteralFromInput(input);
    return injector.getInstance(clazz);
  }

  Class<? extends SomeInterface> getClassLiteralFromInput(String input) {
    // Implement this as needed.
    return SomeInstance.class;
  }
}

請注意,盡管您總是可以注入一個Injector,但是只有在您真的不知道需要哪種實現時才應該這樣做(例如此處)。 通常,如果要延遲創建,則應注入SomeInstance本身,或Provider<SomeInstance>

我們曾經有過類似的要求,所以我們要做的就是使用工廠模式,並使用spring在工廠類實現中添加所有實現。

這樣,在運行時我們會知道要使用哪個實現,我們將致電我的工廠以提供實現類。

另外,只要您有更多的實現,就可以為工廠類更新spring配置。

這可能與您所想到的設計並不接近,但這解決了我們的目的。

干杯!

暫無
暫無

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

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