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
Requires
- php: ^8.0
- psr/container: ^2.0
Requires (Dev)
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^9.6 || ^10.0
- squizlabs/php_codesniffer: ^3.7
README
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.
📄 License
MIT License. See LICENSE for details.
🤝 Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
Made with ❤️ by WPDiggerStudio