gpt4 book ai didi

java - Dagger 2 : How to inject Map, Provider>

转载 作者:搜寻专家 更新时间:2023-11-01 02:01:49 26 4
gpt4 key购买 nike

在 Dagger 2 中,是否可以注入(inject) Map<Class<? extends Foo>, Provider<? extends Foo>>

假设,我有几个扩展 Foo 的类

class Bar extends Foo {
@Inject Bar() {}
}

class Baz extends Foo {
@Inject Baz() {}
}

现在我想创建一个 FooFactory通过声明

class FooFactory {
@Inject FooFactory(Map<Class<? extends Foo>, Provider<? extends Foo>> providers) {}
}

我可以在 Dagger 2 中以最少的配置执行此操作吗?我读过 Multibinding但我无法让它工作。

最佳答案

根据 guidelines 回答我自己的问题.


首先,你必须去掉 Provider<? extends Foo> 中的通配符.

其次,您需要为 map 键声明一个注解:

@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@MapKey
public @interface FooKey {
Class<? extends Foo> value();
}

然后,对于 Foo 的每个实现你需要在你的Module中声明:

@Binds @IntoMap @FooKey(Bar.class)
abstract Foo bindBar(Bar bar)

关于java - Dagger 2 : How to inject Map<Class<? extends Foo>, Provider<?扩展 Foo>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44164395/

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