---
title: "Dependency Injection - явні залежності"
url: https://laravelukraine.com/blog/dependency-injection-iavni-zaleznosti
date: 2026-08-13
---

# Dependency Injection - явні залежності

Dependency Injection передає об'єкту його залежності ззовні, замість того щоб він створював їх сам.

### Яку проблему вирішує

Коли клас сам створює залежності через `new` чи тягне їх через `app()`, він жорстко прив'язується до конкретних реалізацій. Підмінити їх у тестах або замінити одну на іншу стає важко, а справжні залежності класу приховані.

### Як вирішує

Залежності оголошуються в конструкторі через інтерфейси й передаються ззовні. У Laravel це робить контейнер з автозв'язуванням: він сам резолвить і підставляє потрібні реалізації за конфігом біндингів.

```php
interface CacheStore
{
  public function get(string $key): mixed;
}

class RedisStore implements CacheStore
{
  public function get(string $key): mixed
  {
    return null;
  }
}

app()->bind(CacheStore::class, RedisStore::class);

class ReportService
{
  public function __construct(private CacheStore $cache) {}
}
```

### Де застосовувати

- Практично всі сервіси й класи з зовнішніми залежностями - це базовий підхід у Laravel.
- Коли реалізацію треба підмінювати у тестах або міняти за конфігом.

### Плюси та мінуси

- **+** Залежності явні та керовані; тести легко підставляють фейки.
- **+** Реалізації міняються в одному місці - у біндингах контейнера.
- **−** Зловживання інтерфейсами на кожен клас додає зайвого шуму.
- **−** Краще інжектувати через конструктор, а не тягнути `app()` усередині - інакше залежності знову ховаються.
