Назад к вопросам
Middle+
114
questionbank
Что такое мультипривязка в Dagger?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Мультипривязка (Multibinding) в Dagger позволяет декларировать набор объектов (например, Set или Map) из различных модулей, которые будут собраны в коллекцию при инъекции. Это полезно для случаев, когда у вас есть несколько реализаций одного интерфейса или типа, которые нужно обработать единообразно.
Существует два основных типа мультипривязки:
-
Set Multibinding: Создает
Setиз предоставленных объектов.- Аннотация
@IntoSet.
@Module abstract class MyModule { @Binds @IntoSet abstract MyInterface provideImpl1(Impl1 impl); @Binds @IntoSet abstract MyInterface provideImpl2(Impl2 impl); } // В месте инъекции @Inject Set<MyInterface> myImplementations; - Аннотация
-
Map Multibinding: Создает
Mapс ключами и значениями.- Аннотация
@IntoMap. - Необходимо предоставить аннотацию для ключа (например,
@StringKey,@IntKey,@EnumKey).
@Module class MyModule { @Provides @IntoMap @StringKey("key1") MyValueType provideValue1() { return new MyValueType("value1"); } @Provides @IntoMap @StringKey("key2") MyValueType provideValue2() { return new MyValueType("value2"); } } // В месте инъекции @Inject Map<String, MyValueType> myMap; - Аннотация
Мультипривязки упрощают добавление новых элементов в коллекцию без изменения кода, где эта коллекция используется.