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:
- Dependency Injection - Decouple class instantiation from usage
- Auto-wiring - Automatic constructor injection based on type hints
- Service Management - Singletons, factories, and aliases
- 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()andhas()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
- Zero Configuration - Auto-wiring works out of the box
- Explicit When Needed - Register when auto-wiring isn't enough
- No Magic - Simple, predictable behavior