[英]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.