pmieleszkiewicz / chevrotain
简单的PSR-11依赖注入容器
v1.0.0
2020-12-21 00:34 UTC
Requires
- php: ^7.3|^8.0
- psr/container: ^1.0
Requires (Dev)
- phpspec/phpspec: ^7.0
README
这只是PSR-11兼容的依赖注入容器的一个简单实现,带有自动绑定。
安装
composer require pmieleszkiewicz/chevrotain
使用
// LoggerInterface.php interface LoggerInterface { public function log(string $message); } // EchoLogger.php class EchoLogger implements LoggerInterface { public function log(string $message) { echo $message; } } // UserService.php class UserService { /** * @var LoggerInterface */ private $logger; public function __construct(LoggerInterface $logger) { $this->logger = $logger; } public function log(string $message) { $this->logger->log(sprintf("[%s] %s", date('Y-m-d H:i:s'), $message)); } }
<?php declare(strict_types=1); use App\Services\UserService; use App\Loggers\EchoLogger; use App\Loggers\LoggerInterface; use PMieleszkiewicz\Chevrotain\Container; use PMieleszkiewicz\Chevrotain\Exceptions\ContainerException; require __DIR__ . '/vendor/autoload.php'; $container = new Container(); $container->set(LoggerInterface::class, function (Container $container) { return $container->get(EchoLogger::class); }); try { $service = $container->get(UserService::class); $service->log('It works!'); } catch (ContainerException $e) { // handle exception } // Output [2020-12-21 01:00:04] It works!
容器使用自动绑定,因此不需要在Container::set()
方法中嵌套依赖项 - 它可以使用PHP反射API来处理。
测试
composer test