Android 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...
  }

Теперь предположим, что у меня есть модуль кинжала, который я определяю для внедрения 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;
  }
}

Что произойдет, как dagger будет различать это, поскольку у меня есть два модуля, которые обеспечивают инъекцию типа sdame ObjectMapper - какой из них будет выбран?


person j2emanue    schedule 12.12.2014    source источник


Ответы (1)


Он не будет компилироваться.

Если у вас есть две зависимости одного типа в разных модулях, вы должны пометить одну из них как основную. Установите строку ниже в аннотации вашего модуля.

overrides = true
person tomrozb    schedule 12.12.2014