-
-
Notifications
You must be signed in to change notification settings - Fork 1
Feature Contextual
Разным потребителям — разные реализации одного контракта: when(A)->needs(X)->give(Y). Туториал — Contextual-binding.
ContextualBindingSupport хранит правила «для потребителя A зависимость X разрешать как Y». При autowiring класса A, встретив параметр типа X, контейнер сначала проверяет контекстное правило и подставляет Y вместо глобальной привязки.
$c->when(ReportController::class)
->needs(LoggerInterface::class)
->give(AuditLogger::class);
$c->when(HealthController::class)
->needs(LoggerInterface::class)
->give(NullLogger::class);
// ReportController получит AuditLogger, HealthController — NullLoggercontextualGive() / exportContextualBindings() дают программный доступ к правилам.
- Точечная подмена без глобального переопределения интерфейса.
- Решает частый случай: один контракт, разные реализации по месту (аудит vs no-op логгер, разные диски/очереди).
- Читается декларативно.
- Много контекстных правил → сложнее держать в голове весь граф.
- Правила привязаны к конкретным классам-потребителям — при рефакторинге имён нужно обновлять.
- Использовать для инфраструктурных вариаций: разные хранилища/логгеры/очереди у разных модулей.
- Задавать правила в composition root рядом с остальной сборкой.
- Строить бизнес-ветвление на contextual binding (это конфигурация инфраструктуры, а не управление логикой).
- Плодить десятки правил вместо пересмотра границ модулей.
| Контейнер | Аналог |
|---|---|
| PHP-DI | через отдельные определения/фабрики ( |
| Symfony |
bind: по аргументам сервиса, #[Target]
|
| Laravel |
when()->needs()->give() (тот же API) |
| Pimple | нет (❌) |
| Nette | разные сервисы + явная передача |
CloudCastle, PHP-DI, Symfony, Laravel, Nette — CloudCastle и Laravel дают самый прямой fluent-API.
См. также: Contextual-binding (гайд) · bind().
CloudCastle DI · · PHP 8.1+ · PSR-11
GitHub · Packagist · Releases · Discussions · Сравнение
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)
- 🏗️ Архитектура
- ⚡ Быстрый старт
- 📊 Сравнение — 5 аналогов, таблица + победители
- 🧩 Возможности (детально) — каждая фича: принцип, +/−, аналоги
- 🧪 Bootstrap
- 🚀 Compiled container
- 🔗 Contextual binding
- 🤖 Autowiring
- 📄 Конфигурация
- 📖 Справочник конфигурации
- 📂 Сканирование классов
- 🌍 Глобальный реестр
- 🏷️ Теги и декораторы
- 🔗 call(), bind(), hooks
- 🔄 Прототипы, alias, lazy, lazyGhost
- 📋 Справочник API
- 🏭 Фабрики и singleton