Tsudzukeru
@Tsudzukeru

Почему в Activity нужно внедрять зависимости используя Component?

В самом начале изучения DI и Dagger появляются вопросы, на которые не могу найти ответ.
Есть класс Car, в котором есть две ссылки на Engine и Wheels.

public class Car {
    private static final String TAG = "Car";
    @Inject Engine engine;
    private Wheels wheels;

    @Inject
    Car(Wheels wheels){
        this.wheels = wheels;
    }

    public void drive(){
        Log.d(TAG, "driving...");
    }
}


public class Engine {

    @Inject
    public Engine() {
    }
}


public class Wheels {

    @Inject
    public Wheels() {
    }
}

Код Component
@Component
public interface CarComponent {
    void inject(MainActivity mainActivity);
}


Код Activity
public class MainActivity extends AppCompatActivity {
   @Inject Car car;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        CarComponent component = DaggerCarComponent.create();
        component.inject(this);
        car.drive();
    }
}


Скажите почему я могу используя @Inject внедрить Engine в Car, но в тоже время не могу таким же способом внедрить Car в Activity (Необходимо это делать через Component)?
  • Вопрос задан
  • 75 просмотров
Решения вопроса 1
iLLuzor
@iLLuzor
Java, Kotlin, Android Developer
Потому что даггеру нужна точка входа. Для андроида это в большинстве случаев активити или фрагмент
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы