Назад к вопросам
Middle+
114
questionbank

Что такое мультипривязка в Dagger?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Мультипривязка (Multibinding) в Dagger позволяет декларировать набор объектов (например, Set или Map) из различных модулей, которые будут собраны в коллекцию при инъекции. Это полезно для случаев, когда у вас есть несколько реализаций одного интерфейса или типа, которые нужно обработать единообразно.

Существует два основных типа мультипривязки:

  1. 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;
    
  2. 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;
    

Мультипривязки упрощают добавление новых элементов в коллекцию без изменения кода, где эта коллекция используется.