Overview

WPZylos Container is a PSR-11 compatible dependency injection container with auto-wiring support.

Purpose

The container solves dependency management in WordPress plugins by providing:

  1. Dependency Injection - Decouple class instantiation from usage
  2. Auto-wiring - Automatic constructor injection based on type hints
  3. Service Management - Singletons, factories, and aliases
  4. Testability - Easy mocking and replacement of dependencies

Key Components

Container

The main container class implementing Psr\Container\ContainerInterface:

use WPZylos\Framework\Container\Container;

$container = new Container();

// Register services
$container->singleton(Logger::class, fn() => new FileLogger());
$container->bind(Mailer::class, fn($c) => new Mailer($c->get(Logger::class)));

// Resolve
$mailer = $container->get(Mailer::class);

Definition

Service definitions with fluent configuration:

$container->bind(CacheInterface::class, RedisCache::class)
    ->share()           // Singleton
    ->addTag('cache');  // Tagging

Auto-wiring

Classes with type-hinted constructors are automatically resolved:

class UserService {
    public function __construct(
        private UserRepository $repo,
        private Logger $logger
    ) {}
}

// Both dependencies auto-resolved
$service = $container->get(UserService::class);

Features

  • PSR-11 Compliant - get() and has() methods
  • Circular Dependency Detection - Throws on cycles
  • Service Tagging - Group and retrieve related services
  • Aliases - Multiple names for same service
  • Forgetting - Remove services at runtime

Design Philosophy

  1. Zero Configuration - Auto-wiring works out of the box
  2. Explicit When Needed - Register when auto-wiring isn't enough
  3. No Magic - Simple, predictable behavior