Подтвердить что ты не робот

Как создать объект, используя инъекцию конструктора?

Как создать экземпляр Dog с компонентом, который предоставляет Cat.

public final class Dog {
    private final Cat mCat;
    public final static String TAG = "Dog";

    @Inject public Dog(Cat cat) {
        mCat = cat;
        Log.e(TAG, "Dog class created");
    }
}

После эксперимента с Dagger 2 на некоторое время я понятия не имею, как использовать инъекцию конструктора - подсказка была бы приятной, спасибо.

Edit:
Что не так с вопросом? После использования Dagger 2, следуя нескольким учебным пособиям и прочитав официальную документацию, я не знаю, как использовать функцию встраивания конструктора, вот почему я спрашиваю здесь. Вместо того, чтобы вводить зависимость Cat в Dog с @Inject, я мог бы написать DogModule, предоставляющий объект Dog, но тогда Dog будет просто обычным классом Java. Полевая инъекция отлично работает (есть много примеров, показывающих, как ее использовать), но что мне нужно сделать, чтобы использовать инъекцию конструктора?

4b9b3361

Ответ 1

Чтобы создать объект с помощью функции вставки конструктора Dagger 2, вам нужно добавить метод к компоненту, который предоставляет класс Cat.

@Component(
    dependencies = ApplicationComponent.class,
    modules = CatModule.class)
public interface ActivityComponent {
    void inject(final CatActivity a);
    // objects exposed to sub-components
    Cat cat();
    Dog dog();
}

Затем экземпляр Dog можно восстановить, вызвав [Component].dog().

final ActivityComponent comp = DaggerActivityComponent.builder()
            .applicationComponent(app.getApplicationComponent())
            .build();

final Dog d = comp.dog();