Как создать объект с помощью внедрения конструктора?

Как мне создать экземпляр 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, я понятия не имею, как использовать внедрение конструктора — подсказка была бы кстати, спасибо.

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


person Paradiesstaub    schedule 25.04.2015    source источник


Ответы (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();
person Paradiesstaub    schedule 26.04.2015
comment
Этот ответ мне очень помог. Благодарю вас! Тем не менее, я все еще удивляюсь, почему нет примеров внедрения зависимостей в конструктор столь популярного фреймворка. - person Salivan; 27.05.2016