我有一個組件-子組件關(guān)系。每個都有不同的作用域,并使用自己的模塊,該模塊提供相同類型的缺陷。我需要的是基于范圍的不同對象實例化。Dagger不會允許這樣做,因為我將有“多個綁定”。如何在不@Named資格賽的情況下解決問題?例如,有沒有辦法覆蓋子組件?//Higher scoped object (in component) @Provides @ClientScope ISupResRankStrategy iSupResRankStrategy(@Named("GlobalModelConfig") JsonNode configSubTree, Lazy<SortByMagnitudeSum> strat1, Lazy<SortByShadowPercentage> strat2) { @SuppressWarnings("rawtypes") Map<String, Lazy> availableStrategies = new HashMap<>(); availableStrategies.put(SortByMagnitudeSum.class.getSimpleName(), strat1); availableStrategies.put(SortByShadowPercentage.class.getSimpleName(), strat2); String configuredStrategy = configSubTree.findValue("ISupResRankStrategy").asText(); return (ISupResRankStrategy) availableStrategies.get(configuredStrategy).get(); }//lower scoped object (in subcomponent)@Provides@ModelScopeISupResRankStrategy iSupResRankStrategy(@Named("TradeModelConfig") JsonNode configSubTree, Lazy<SortByMagnitudeSum> strat1, Lazy<SortByShadowPercentage> strat2) { @SuppressWarnings("rawtypes") Map<String, Lazy> availableStrategies = new HashMap<>(); availableStrategies.put(SortByMagnitudeSum.class.getSimpleName(), strat1); availableStrategies.put(SortByShadowPercentage.class.getSimpleName(), strat2); String configuredStrategy = configSubTree.findValue("ISupResRankStrategy").asText(); return (ISupResRankStrategy) availableStrategies.get(configuredStrategy).get();}
2 回答

慕哥6287543
TA貢獻1831條經(jīng)驗 獲得超10個贊
Dagger不會允許這樣做,因為我將有“多個綁定”。如何在不@Named資格賽的情況下解決問題?例如,有沒有辦法覆蓋子組件?
沒有。不能同時擁有 2 個具有不同作用域的相同類型的對象。匕首應(yīng)該如何知道你想要的2個中的哪一個?
要擁有多個相同類型的對象,您可以
使用 ,是其中之一,但您可以使用更好的名稱創(chuàng)建自己的名稱,例如,
@Qualifier
@Named
@Client
@Model
使用組件依賴項而不是子組件,這樣您就不能將對象公開給依賴組件,從而允許它們自己的實例

明月笑刀無情
TA貢獻1828條經(jīng)驗 獲得超4個贊
使用@Qualifier,@Named。你可以重載 DI
例如
@Provides @Named("type1")
Model provideModel() {
return new Model();
}
@Provides @Named("type2")
Model provideModeWithContext(Context context) {
return new Model(context);
}
添加回答
舉報
0/150
提交
取消