0

我有一个界面:

public interface MyInterface {...}

MyInterface 的每个实现都有自己的(不同的)依赖项。例子:

public class MyObjectOne implements MyInterface {
    @Inject ServiceA ...;
    ...
}

public class MyObjectTwo implements MyInterface {
    @Inject ManagerB ...;
    @Inject ProviderC ...;
    ...
}

我可以有数百个 MyInterface 实现。现在我想创建一个地图如下:

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 的一项功能?

提前欢呼和感谢。

4

1 回答 1

0

首先,这将是一个设计缺陷,需要自己实例化一些东西。进行了依赖注入以提升该问题和由此产生的样板。我个人会将模块中的类作为injectsorincludes并将实例(可能是单例)注入到该映射中。

在您的情况下,您要注入的是 aMemberInjector并注入到MyObjectOneetc 的成员中。这样,您可以通过迭代地图的值轻松创建自己的 MapBinder。

于 2014-03-22T17:06:52.853 回答