-
-
Notifications
You must be signed in to change notification settings - Fork 1
Home
github-actions[bot] edited this page Jun 25, 2026
·
1 revision
Лёгкий контейнер внедрения зависимостей для PHP 8.3+ с поддержкой PSR-11. Одна runtime-зависимость — psr/container.
composer require cloudcastle/diPackagist: https://packagist.org/packages/cloudcastle/di
- готовые экземпляры и фабрики через
set(); - singleton-кэш: фабрика вызывается один раз до следующего
set(); - PSR-11:
get(),has(); - расширенный контракт:
hasDefinition().
-
enableAutowiring()— любой instantiable-класс доступен по FQCN черезget(); -
autowire(FQCN)— точечная регистрация без глобального режима; -
enableParameterNameAutowiring()— id сервиса = имя параметра ($logger→'logger'); -
enablePropertyAutowiring()/enableMethodAutowiring()— typed properties и inject-методы после конструктора; - PHP attributes
Inject/Autowireна конструкторе, свойствах и методах; - разрешение зависимостей: типы, union, intersection, nullable,
ContainerInterface/ PSR-11; - обнаружение циклических зависимостей при autowiring;
- явный
set()всегда имеет приоритет над autowiring.
-
scan($directory, $namespace?)— рекурсивный обход.php-файлов; - парсинг
namespaceиclassбез выполнения файла; - фильтр по префиксу namespace;
- только instantiable-классы; существующие
set()не перезаписываются.
-
tag()/getTagged()— группы сервисов (порядок = порядокtag()); -
decorate()— цепочка обёрток приget()(первый декоратор ближе к inner).
-
ContainerRegistry— singleton-контейнер приложения; - инициализация в bootstrap через
ContainerRegistry::set(); -
reset()для изоляции тестов.
PHPStan max, Psalm L1, покрытие строк ≥95%, Infection MSI ≥95%.
<?php
use CloudCastle\DI\Container;
use CloudCastle\DI\ContainerRegistry;
$container = new Container();
$container->enableAutowiring();
$container->scan(__DIR__ . '/App/Services', 'App\\Services\\');
ContainerRegistry::set($container);
$service = ContainerRegistry::get()->get(App\Services\OrderService::class);| Страница | Описание |
|---|---|
| Быстрый старт | установка, PSR-11, composition root |
| Примеры bootstrap | plain PHP, CLI, unit/integration тесты |
| Autowiring | reflection, типы параметров, циклы, приоритеты |
| Сканирование классов |
scan(), фильтр namespace, ограничения |
| Глобальный реестр |
ContainerRegistry, bootstrap, тесты |
| Теги и декораторы |
tag(), getTagged(), decorate()
|
| Справочник API | все методы и исключения |
| Фабрики и singleton | callable, кэш, null, циклы в фабриках |
| Тестирование | unit/integration, моки, ContainerRegistry::reset()
|
| Анти-паттерны | service locator, autowiring, глобальный контейнер |
| Обновление версий | миграция между релизами |
| Участие в разработке |
composer ci, PR |
| FAQ | частые вопросы |
MIT — см. LICENSE.