Зависимость Dagger внедряется индивидуально и @IntoSet одновременно. Как мне это реализовать?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Зависимость Dagger внедряется индивидуально и @IntoSet одновременно. Как мне это реализовать?

Сообщение Anonymous »

Я изучаю Даггер. Я бывший пользователь Spring. Одна из вещей, которую я заметил, это то, что мне приходится аннотировать каждый компонент с помощью @IntoSet, чтобы внедрить компоненты определенного типа в виде коллекции. В Spring я бы прямо объявил, например, Set в качестве параметра в автоматически подключаемом методе или конструкторе, и фреймворк сам все выяснит (правда, «фреймворк, который все сделает за вас», - это не всегда преимущество)
Однако @IntoSet иногда что-то ломает. Вот MRE:

Код: Выделить всё

package myown;

import dagger.Component;

import javax.inject.Named;
import javax.inject.Singleton;
import java.util.Set;

@Component(modules = {PersonModule.class})
@Singleton
public interface PersonComponent {
Person getJane();
}

Код: Выделить всё

package myown;

import dagger.Module;
import dagger.Provides;
import dagger.multibindings.IntoSet;

import javax.inject.Singleton;

@Module(includes = PetModule.class)
public class PersonModule {
@IntoSet
@Singleton
@Provides
public Person jane(Pet pet) {
return new PetOwner("Jane", pet);
}
}

Код: Выделить всё

package myown;

import dagger.Module;
import dagger.Provides;

import javax.inject.Singleton;

@Module
public class PetModule {
@Provides
@Singleton
Pet getPet() {
return new Pet("Puffy");
}
}

Код: Выделить всё

package myown;

public class Person {
private final String name;

public Person(String name) {
this.name = name;
}
}

Код: Выделить всё

package myown;

public class PetOwner extends Person {
private final Pet pet;

public PetOwner(String name, Pet pet) {
super(name);
this.pet = pet;
}
}

Код: Выделить всё

package myown;

public class Pet {
private final String name;

public Pet(String name) {
this.name = name;
}
}
Попробуйте собрать его, и вы получите:

Код: Выделить всё

java: [Dagger/MissingBinding] myown.Person cannot be provided without an @Inject constructor or an @Provides-annotated method.
myown.Person is provided at
myown.PersonComponent.getJane()
Однако, если вы закомментируете @IntoSet и попытаетесь пересобрать его, все будет в порядке.
Чтобы внести ясность, я хочу Джейн , чтобы иметь возможность вводить напрямую и как часть введенного Set всех Person (представьте, что есть jack, john< /code> и т. д., также помеченные @IntoSet)
Почему это происходит и есть ли решение/обходной путь?

Подробнее здесь: https://stackoverflow.com/questions/785 ... e-how-do-i
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»