gpt4 book ai didi

java - Dagger-2:如何根据其范围为同一对象类型创建不同的实例化?

转载 作者:行者123 更新时间:2023-12-02 10:02:17 25 4
gpt4 key购买 nike

我有组件-子组件关系。每个都有不同的范围并使用自己的模块,该模块提供相同类型的依赖关系。我需要的是基于范围的不同对象实例。 Dagger 不允许这样做,因为我将有“多个绑定(bind)”。如果没有@Named-Qualifiers,我将如何解决问题?比如有没有办法在子组件中进行覆盖?

//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
@ModelScope
ISupResRankStrategy 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();
}

最佳答案

Dagger won't allow that since I will have "multiple bindings". How would I solve the problem without @Named-Qualifiers? For example, is there a way to overwrite in the subcomponent?

没有。您不能同时拥有两个具有不同作用域的相同类型的对象。 Dagger 如何知道您想要这两个中的哪一个?

要拥有多个相同类型的对象,您可以

  • 使用@Qualifier@Named是其中之一,但您可以使用更好的名称创建自己的名称,例如@Client@Model
  • 使用组件依赖项而不是子组件,这样您就无法将对象暴露给依赖组件,从而允许它们自己的实例

关于java - Dagger-2:如何根据其范围为同一对象类型创建不同的实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55539768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com