Вы читаете предварительную версию v0.1. API могут измениться.
~ 1 мин чтенияОбновлено 2026-10-29

Контейнер сервисов

Контейнер Elang реализует PSR-11. Он разрешает конкретные классы через внедрение зависимостей в конструктор и поддерживает явные привязки для интерфейсов и скалярных значений конфигурации.

Привязка интерфейса

$app->container->bind(Clock::class, SystemClock::class);

При разрешении привязки создаётся новый сервис. Используйте замыкание, если сервису нужна конфигурация.

Общие сервисы

use Elang\Container\Container;

$app->container->singleton(Client::class, fn (Container $container) =>
    new Client('https://api.example.com')
);

singleton() повторно использует один экземпляр. instance() регистрирует существующее значение. Конкретные классы без привязки каждый раз создаются заново. Циклические зависимости вызывают исключение контейнера с цепочкой разрешения.

Внедрение зависимостей

final class ReportController
{
    public function __construct(private ReportService $reports) {}
}

Для скалярных аргументов нужна явная фабрика или значение по умолчанию. Объединённые типы не разрешаются автоматически. Именованные значения маршрута имеют приоритет перед внедряемыми аргументами обработчика.

Провайдеры сервисов

Реализуйте Elang\Contracts\ServiceProvider с методами register(Container $container) и boot(Application $app), затем вызовите $app->provider(new MyProvider()). Регистрируйте зависимости до добавления маршрутов или слушателей, которые их используют.

Сервисы, связанные с текущим запросом, должны оставаться непостоянными. Сейчас Elang ориентирован на обычный жизненный цикл PHP-запросов; интеграция с долгоживущими HTTP-обработчиками не включена.

Нужна помощь?

Проверьте руководство по решению проблем, найдите термин в глоссарий, или пройдите полноценный проект доски задач.

Поиск по документации Elang

Начните вводить, чтобы найти следующий шаг.