aura/di
Aura.Di is a PSR-11 dependency injection container for PHP 8+ with constructor and setter injection, interface and trait awareness, configurable wiring with inheritance, and support for serialization. Installable via Composer and fully documented.
#[Service], #[Instance], #[Value]) for declarative configuration, aligning with modern Laravel practices (e.g., Laravel 9+’s attribute-based macros and bindings).Resolver and Container classes can wrap Laravel’s Illuminate\Container\Container via a decorator pattern, preserving existing bindings while adding advanced features (e.g., lazy loading, compiled blueprints).ContainerCompileInterface allows intercepting the compilation process, enabling Laravel’s Bootstrap\HandleCompiledServices or custom service registration logic.bind(), singleton()) can coexist with Aura.Di’s attribute-based or programmatic setup, reducing disruption.#[Service], #[Blueprint]) differs from Laravel’s traditional bind() syntax. Requires team training or documentation updates.bin/auradi scan). Benchmarking is recommended for latency-sensitive apps.artisan commands (e.g., make:controller) are unaffected.config/cache.php)? Will a custom Artisan command be needed?app()->bind() configurations interact with Aura.Di’s attribute-based or compiled services?Resolver could log resolution stats.)Illuminate\Container\Container without breaking core functionality (e.g., Facades, service providers).register() can coexist with Aura.Di’s attribute-based or programmatic configurations.Resolver:
$laravelContainer = app();
$auraResolver = new Aura\Di\Resolver($laravelContainer);
$auraContainer = new Aura\Di\Container($auraResolver);
bind()/singleton() calls.#[Service]
class MyService {}
bin/auradi scan to generate compiled blueprints for critical services.app() with Aura.Di’s container in AppServiceProvider:
public function register(): void {
$this->app->singleton(Aura\Di\Container::class, fn() => new Aura\Di\Container());
}
config/app.php to point to Aura.Di’s container alias.set() method mirrors Laravel’s bind(), enabling gradual migration.when()) can be replicated using Aura.Di’s Producer or custom AttributeConfigInterface implementations.lazy() and LazyInterface align with Laravel’s lazy service resolution (e.g., for deferred providers).bin/auradi in composer.json scripts for blueprint generation.BindingResolutionException.ide-helper packages may need updates.#[Blueprint]) could create lock-in. Mitigate by documenting migration paths back to Laravel’s native container.lazy() methods optimize memory usage for rarely used services (e.g., admin panels in SaaS apps).bind() lookups).| Scenario | Risk | Mitigation |
|---|---|---|
| Compilation Errors | Broken blueprints crash app | Validate blueprints in staging; use feature flags for new services. |
| Attribute Misconfiguration | Services fail to instantiate | Static analysis (PHPStan) for #[Service] attributes; CI pre-checks. |
| PHP Version Incompatibility | Breaks on PHP 8.1+ | Enforce PHP 8.2+ in CI; use composer.json platform config. |
| Circular Dependencies | Infinite loops in resolution | Aura.Di’s Resolver throws clear errors; replicate Laravel’s CircularDependencyException. |
| Cache Invalidation | Stale blueprints in production | Tie blueprint generation to config/cache.php; use php artisan aura:compile. |
bind().use statements).bind() with Aura.Di’s #[Service]/set().bin/auradi commands and common attributes.composer test and bin/auradi scan --dry-run.How can I help you explore Laravel packages today?