wpdiggerstudio/wpzylos-container

PSR-11 compatible dependency injection container with auto-wiring for WPZylos framework

Fund package maintenance!
Paypal

Installs: 232

Dependents: 1

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/wpdiggerstudio/wpzylos-container

v1.0.0 2026-02-01 13:00 UTC

This package is auto-updated.

Last update: 2026-02-01 13:03:41 UTC


README

PHP Version License GitHub

PSR-11 compatible dependency injection container with auto-wiring for WordPress plugins.

📖 Full Documentation | 🐛 Report Issues

✨ Features

  • PSR-11 Compatible — Implements ContainerInterface
  • Auto-wiring — Automatic constructor injection
  • Singletons — Shared instances across resolves
  • Factories — New instances per resolution
  • Tagged Services — Group related services
  • Contextual Binding — Different implementations per consumer

📋 Requirements

Requirement Version
PHP ^8.0

🚀 Installation

composer require wpdiggerstudio/wpzylos-container

📖 Quick Start

use WPZylos\Framework\Container\Container;

$container = new Container();

// Bind a singleton (shared instance)
$container->singleton(DatabaseConnection::class, fn() => new DatabaseConnection());

// Bind a factory (new instance each time)
$container->bind(Logger::class, fn() => new Logger());

// Auto-wiring (automatic dependency resolution)
$container->bind(UserService::class);

// Resolve
$db = $container->get(DatabaseConnection::class);
$logger = $container->get(Logger::class);
$userService = $container->get(UserService::class);

🏗️ Core Features

Singleton Binding

// Registered once, shared everywhere
$container->singleton(Config::class, fn() => new Config('config.php'));

$config1 = $container->get(Config::class);
$config2 = $container->get(Config::class);
// $config1 === $config2

Factory Binding

// New instance every time
$container->bind(Request::class, fn() => new Request());

$req1 = $container->get(Request::class);
$req2 = $container->get(Request::class);
// $req1 !== $req2

Auto-wiring

class UserService {
    public function __construct(
        private DatabaseConnection $db,
        private Logger $logger
    ) {}
}

// Container automatically resolves dependencies
$container->bind(UserService::class);
$userService = $container->get(UserService::class);

Interface Binding

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

Tagged Services

$container->tag([EmailNotifier::class, SlackNotifier::class], 'notifiers');

$notifiers = $container->tagged('notifiers');
foreach ($notifiers as $notifier) {
    $notifier->send($message);
}

📦 Related Packages

Package Description
wpzylos-core Application foundation
wpzylos-config Configuration management
wpzylos-scaffold Plugin template

📖 Documentation

For comprehensive documentation, tutorials, and API reference, visit wpzylos.com.

☕ Support the Project

If you find this package helpful, consider buying me a coffee! Your support helps maintain and improve the WPZylos ecosystem.

Donate with PayPal

📄 License

MIT License. See LICENSE for details.

🤝 Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

Made with ❤️ by WPDiggerStudio