Configuration

Basic Setup

The container requires no configuration. Create an instance and start binding:

use WPZylos\Framework\Container\Container;

$container = new Container();

Binding Options

Standard Binding (Factory)

Each get() call creates a new instance:

$container->bind(Logger::class, fn() => new FileLogger());

$a = $container->get(Logger::class);
$b = $container->get(Logger::class);
// $a !== $b (different instances)

Singleton Binding

Same instance returned every time:

$container->singleton(Database::class, fn() => new Database());

$a = $container->get(Database::class);
$b = $container->get(Database::class);
// $a === $b (same instance)

Class Binding

Bind interface to concrete class:

$container->bind(CacheInterface::class, RedisCache::class);

Alias Binding

Create alternative names for services:

$container->singleton(DatabaseConnection::class, fn() => new MySQL());
$container->alias('db', DatabaseConnection::class);

$db = $container->get('db'); // Returns MySQL instance

Fluent Definition

Chain configuration on definitions:

$container->bind(EventHandler::class, MyHandler::class)
    ->share()                    // Make singleton
    ->addTag('event.handler');   // Add tag

Service Tagging

Group related services:

$container->bind(FileCache::class)->addTag('cache');
$container->bind(RedisCache::class)->addTag('cache');

// Retrieve all tagged services
$caches = $container->tagged('cache');