Dagger 2:如何注入Map, Provider>

2023-12-28

在 Dagger 2 中,是否可以注入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 中执行此操作吗?我读过关于多重绑定 https://google.github.io/dagger//multibindings.html但我无法让它发挥作用。


Answering my own question in accordance to the guidelines https://stackoverflow.com/help/self-answer.


首先,您必须删除中的通配符Provider<? extends Foo>.

其次,您需要为地图键声明一个注释:

@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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dagger 2:如何注入Map, Provider> 的相关文章

随机推荐