gpt4 book ai didi

android - 使用 Dagger,可以重新创建注入(inject)的对象吗?

转载 作者:行者123 更新时间:2023-11-30 00:30:56 25 4
gpt4 key购买 nike

A 有与此类似的代码:

class MyActivity extends Activity {
IStrategy mStrategy;

public void onCreate(Bundle data) {
if (someSpecificCondition) {
mStrategy = new StrategyA();
} else {
mStrategy = new StrategyB();
}
}

public void onUnsupportedState() {
// Will have to switch strategy
mStrategy = new StrategyB();
}
}

我想在这里注入(inject) IStrategy。但是我有两个问题:

  1. 它是一个接口(interface),具体实现是动态变化的。
  2. 即使在选择了具体实现之后,也有可能需要重新创建它。

我可以通过创建一个带有决策逻辑的 provides 方法来克服 (1)(尽管不确定这是否是最佳方法)。

但我不确定如何处理 (2)。在这种情况下手动创建注入(inject)对象是否可以?有人看到另一种解决方案吗?

最佳答案

如您所说,向提供程序方法添加逻辑并不是一个好的设计决策。手动实例化对象在某些情况下是有效的,但只能作为最后的手段。

在这种情况下,最好的方法(恕我直言)是注入(inject)抽象工厂,根据需要实例化 IStrategy 实现。

在目前的情况下,工厂方法将需要接受额外的参数,允许您指定您感兴趣的策略。虽然这不是世界末日,但客户端控制的事实它使用的策略有点不干净——客户知道那里有多少策略。

根据手头的具体用例,您或许能够重构代码并从客户端提取区分策略的逻辑。这样,您的客户将要求 IStrategy,同时完全不知道实现的细节和可用实现的数量。

关于android - 使用 Dagger,可以重新创建注入(inject)的对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44396388/

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