switon / di
Property-based dependency injection with interface autowiring, named slots, and shared versus fresh instances for Switon Framework
v1.0.0
2026-06-06 13:43 UTC
Requires
- php: >=8.3
- ext-json: *
- psr/container: ^2.0
- psr/event-dispatcher: ^1.0
- switon/core: ^1.0
Requires (Dev)
- phpstan/extension-installer: ^1.4
- phpstan/phpstan: ^2.0
- phpunit/phpunit: ^12.0
README
Switon's dependency injection container for autowiring, named services, and bootstrap wiring.
Highlights
- Shared container:
ContainerInterfacehandles service resolution and definition registration. - Service autowiring:
#[Autowired]can inject object services without manual lookups. - Config autowiring: the same attribute can fill scalar and array properties from config.
- Named instances:
FactoryInterfacesupports multiple implementations of the same type. - Lazy dependencies:
Lazydefers non-default resolution until a value is actually used. - Autowired instances:
#[Autowired(instances: true)]can inject service arrays from config.
Installation
composer require switon/di
Quick Start
# switon.yml Switon\Core\AppInterface: id: admin name: Admin Panel version: 2.0.0 env: dev debug: true timezone: Asia/Shanghai
use Switon\Core\AppInterface; use Switon\Core\Attribute\Autowired; class DashboardService { #[Autowired] protected AppInterface $app; public function title(): string { return $this->app->name() . ' (' . $this->app->env() . ')'; } }
Docs: https://docs.switon.dev/latest/di
License
MIT.