nia / dependencyinjection
nia 组件用于处理依赖注入。
此包的官方仓库似乎已消失,因此该包已被冻结。
1.0.0
2016-02-06 23:59 UTC
Requires
- php: >=7.0.0
This package is not auto-updated.
Last update: 2022-03-09 06:05:46 UTC
README
易于使用的依赖注入处理。
安装
使用 Composer 需要此包。
composer require nia/dependencyinjection
注意
此组件不使用注解、配置文件或其他“黑魔法”进行类实例化 - 只是普通的可重用代码。此组件仅提供 服务,没有参数,因为参数可以用映射或配置组件封装。
测试
要运行单元测试,请使用以下命令
$ cd /path/to/nia/component/
$ phpunit --bootstrap=vendor/autoload.php tests/
示例:注册服务
以下示例展示了如何注册一个非共享服务。服务将在每个服务请求时创建。
$container = new Container(); // register a non shared uuid generator - non shared because time() must be called every time. $container->registerService(UuidGeneratorInterface::class, new ClosureFactory(function(ContainerInterface $container) { return new TimeBasedUuidGenerator(time()); })); // get the service and generate a new uuid. $uuid = $container->get(UuidGeneratorInterface::class)->generate();
示例:注册提供者
以下示例展示了如何实现提供者接口和共享服务的使用。对于共享服务,不需要使用 static
关键字,只需使用 Nia\DependencyInjection\Factory\SharedFactory
装饰器。
class DatabaseProvider implements ProviderInterface { public function register(ContainerInterface $container) { // register a shared PDO connection. $container->registerService(PDO::class, new SharedFactory(new ClosureFactory(function(ContainerInterface $container){ // [...] return new PDO($ds, $username, $password, $options); }))); } } $container = new Container(); $container->registerProvider(new DatabaseProvider()); $pdo = $container->get(PDO::class);
示例:扩展服务工厂。
在这个示例中,您将看到如何使用 Nia\DependencyInjection\Extender\ClosureExtender
实现修改服务工厂。对于您自己的扩展实现,您必须实现 Nia\DependencyInjection\Extender\ExtenderInterface
接口。
$container = new Container(); // register a non shared logger implementation. $container->registerService(LoggerInterface::class, new ClosureFactory(function(ContainerInterface $container) { // [...] return new FileLogger($file); })); // [...] // modify the logger service factory - make it shared. $container->extendService(LoggerInterface::class, new ClosureExtender(function(FactoryInterface $factory) { return new SharedFactory($factory); }));