使用具有依赖项的对象构建Map

时间:2014-03-17 01:59:17

标签: java dependency-injection dagger

我有一个界面:

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不提供此功能。

  1. Dagger可以解决我的问题吗?

  2. 如果没有,MapBinder是否可以成为Dagger 2.0的功能?

  3. 提前干杯谢谢。

1 个答案:

答案 0 :(得分:0)

首先,这将是一个设计缺陷,需要自己实例化。依赖注入是为了解决这个问题以及由此产生的锅炉板。我个人会将模块中的类作为injectsincludes,并将实例(可能是单例)注入到该地图中。

在您的情况下,您要注入的是MemberInjector并注入MyObjectOne等成员。通过迭代地图的值,您可以轻松创建自己的MapBinder。