Skip to content

Container Package

PSR-11 dependency injection container.

Installation

bash
composer require lighthouse/container

Basic 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);
}

Released under the MIT License.