匕首2:如何注入Map< Class<?延伸Foo>,提供商<?扩展Foo>> [英] Dagger 2: How to inject Map<Class<? extends Foo>, Provider<? extends Foo>>
本文介绍了匕首2:如何注入Map< Class<?延伸Foo>,提供商<?扩展Foo>>的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在Dagger 2中,是否可以注入 Map< Class<?延伸Foo>,提供商<?扩展Foo>>
?
In Dagger 2, is it possible to inject a Map<Class<? extends Foo>, Provider<? extends Foo>>
?
假设我有几个类扩展 Foo
class Bar extends Foo {
@Inject Bar() {}
}
class Baz extends Foo {
@Inject Baz() {}
}
现在我想通过声明
class FooFactory {
@Inject FooFactory(Map<Class<? extends Foo>, Provider<? extends Foo>> providers) {}
}
我可以用最少的配置在Dagger 2中执行此操作吗?我已经阅读了多重绑定,但我无法让它工作。
Can I do this in Dagger 2 with minimal configuration? I've read about Multibinding but I couldn't get it to work.
推荐答案
根据指南。
首先,你必须摆脱提供商中的通配符<?扩展Foo>
。
其次,您需要为地图密钥声明一个注释:
Second, you need to declare an annotation for the map key:
@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@MapKey
public @interface FooKey {
Class<? extends Foo> value();
}
然后,每次执行 Foo
您需要在模块中声明
:
Then, for each implementation of Foo
you need to declare in your Module
:
@Binds @IntoMap @FooKey(Bar.class)
abstract Foo bindBar(Bar bar)
这篇关于匕首2:如何注入Map< Class<?延伸Foo>,提供商<?扩展Foo>>的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文