Android Dagger - 一种被选中的提供者方法

时间:2014-12-12 17:32:21

标签: android dependency-injection dagger

假设我有这样的活动:

 public class ListBlogsActivity extends Activity {
  @Inject ObjectMapper mapper;


  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //Put Dagger into action
    ObjectGraph.create(new ListBlogsModule()).inject(this);  //Dagger

    //do a bunch of other things etc...
  }

现在让我说我有一个dagger模块,我定义它将ObjectMapper注入活动,如下所示:

    @Module(injects = ListBlogsActivity.class)
public class ListBlogsModule {
  @Provides ObjectMapper objectMapper() {

    ObjectMapper mapper = new ObjectMapper();
    //do some more stuff ..blah blah
    return mapper;
  }
}

现在这是我的关键问题:

假设我有另一个模块,我们定义它将一个ObjectMapper注入到同一个活动中:

@Module(injects = ListBlogsActivity.class)
public class ListBlogs2Module {
  @Provides ObjectMapper objectMapper2() {

    ObjectMapper mapper = new ObjectMapper();
    //do some more stuff ..blah blah
    return mapper;
  }
}

会发生什么,匕首将如何区分这个因为我有两个模块提供了一个注入sdame类型的ObjectMapper - 哪一个被选中?

1 个答案:

答案 0 :(得分:0)

它不会编译。

如果在不同的模块中有两个相同类型的依赖项,则必须将一个标记为覆盖它。在模块注释的下面设置。

overrides = true