我有一个组件-子组件关系。每个都有不同的作用域,并使用自己的模块,该模块提供相同类型的缺陷。我需要的是基于范围的不同对象实例化。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条经验 获得超10个赞
Dagger不会允许这样做,因为我将有“多个绑定”。如何在不@Named资格赛的情况下解决问题?例如,有没有办法覆盖子组件?
没有。不能同时拥有 2 个具有不同作用域的相同类型的对象。匕首应该如何知道你想要的2个中的哪一个?
要拥有多个相同类型的对象,您可以
使用 ,是其中之一,但您可以使用更好的名称创建自己的名称,例如,
@Qualifier
@Named
@Client
@Model
使用组件依赖项而不是子组件,这样您就不能将对象公开给依赖组件,从而允许它们自己的实例
明月笑刀无情
TA贡献1828条经验 获得超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
提交
取消