我有一个界面:
public interface MyInterface {...}
MyInterface的每个实现都有自己的(不同的)依赖项。例如:
public class MyObjectOne implements MyInterface {
@Inject ServiceA ...;
...
}
public class MyObjectTwo implements MyInterface {
@Inject ManagerB ...;
@Inject ProviderC ...;
...
}
我可以有数百个MyInterface实现。现在我想创建一个Map如下:
Map<String, MyInterface> map = new HashMap<String, MyInterface>();
map.put("key1", new MyObjectOne());
map.put("key2", new MyObjectTwo());
...
map.put("keyn", new MyObjectN());
不幸的是,这个短路Dagger并不会在MyObjectOne,MyObjectTwo,...和MyObjectN中注入任何东西。此外,我目前没有ObjectGraph,因为此代码是库/模块的一部分。
当我正在寻找解决方案时,我遇到了Guice中的MapBinder课程,它似乎做了我想做的事情。 Dagger不提供此功能。
Dagger可以解决我的问题吗?
如果没有,MapBinder是否可以成为Dagger 2.0的功能?
提前干杯谢谢。
答案 0 :(得分:0)
首先,这将是一个设计缺陷,需要自己实例化。依赖注入是为了解决这个问题以及由此产生的锅炉板。我个人会将模块中的类作为injects
或includes
,并将实例(可能是单例)注入到该地图中。
在您的情况下,您要注入的是MemberInjector
并注入MyObjectOne
等成员。通过迭代地图的值,您可以轻松创建自己的MapBinder。