Container Package
PSR-11 dependency injection container.
Installation
bash
composer require lighthouse/containerBasic Usage
php
use Lighthouse\Container\Container;
$container = new Container();
// Bind implementation
$container->bind(LoggerInterface::class, FileLogger::class);
// Resolve
$logger = $container->get(LoggerInterface::class);Binding
Class Binding
php
$container->bind(Logger::class, FileLogger::class);Closure Binding
php
$container->bind(Database::class, function ($container) {
return new Database('localhost', 'root', 'secret');
});Singletons
php
$container->singleton(Database::class, function ($container) {
return new Database('localhost', 'root', 'secret');
});Same instance returned every time.
Instances
php
$logger = new FileLogger('/var/log/app.log');
$container->instance(Logger::class, $logger);Resolving
Get
php
$service = $container->get(UserService::class);Has
php
if ($container->has(Logger::class)) {
// ...
}Make (always new)
php
$service = $container->make(UserService::class);Auto-Wiring
The container automatically resolves constructor dependencies:
php
class UserService
{
public function __construct(
private Database $db,
private Logger $logger
) {}
}
// Container creates Database, Logger, then UserService
$service = $container->get(UserService::class);Method Injection
php
$container->call($controller, 'index', [
'id' => 123,
'request' => $request,
]);PSR-11 Compliance
Implements Psr\Container\ContainerInterface:
php
use Psr\Container\ContainerInterface;
function bootstrap(ContainerInterface $container) {
$logger = $container->get(LoggerInterface::class);
}