webiik / container
容器为大多数Pimple函数添加了便捷的方法,并将容器中的依赖自动注入到类构造函数中。
1.1
2021-07-02 13:05 UTC
Requires
- php: >=7.2
- pimple/pimple: ^3
This package is auto-updated.
Last update: 2024-09-29 05:28:16 UTC
README
容器
容器为大多数Pimple函数添加了便捷的方法,并将容器中的依赖自动注入到类构造函数中。
安装
composer require webiik/container
示例
$container = new \Webiik\Container\Container(); $container->addService('\Webiik\Arr\Arr', function () { return new \Webiik\Arr\Arr(); }); $array = $container->get('\Webiik\Arr\Arr');
添加
addService
addService(string $name, callable $factory): void
addService() 将服务工厂添加到容器。它总是返回相同的服务实例。
$container->addService('\Webiik\Arr\Arr', function () { return new \Webiik\Arr\Arr(); });
如果需要在 $factory 内部访问容器
$container->addService('Service', function ($container) { // $container - Container });
addServiceFactory
addServiceFactory(string $name, callable $factory): void
addServiceFactory() 将服务工厂添加到容器。它总是返回新的服务实例。
$container->addService('\Webiik\Arr\Arr', function () { return new \Webiik\Arr\Arr(); });
addParam
addParam(string $name, $val): void
addParam() 将参数添加到容器。
$container->addParam('foo', 'bar');
addFunction
addFunction(string $name, callable $function): void
addFunction() 将函数添加到容器。
$container->addFunction('myFn', function ($a, $b) { return $a * $b; });
检查
isIn
isIn(string $name): bool
isIn() 检查服务、参数或函数是否存储在容器中。
$container->isIn('\Webiik\Arr\Arr');
获取
get
get(string $name)
get() 从容器中返回服务、参数或函数。
$array = $container->get('\Webiik\Arr\Arr');
依赖注入
容器通过方法 injectTo(string $className): array
提供从容器到类控制器的自动依赖注入。然而,它需要遵循以下命名约定
按类名注入服务
- 添加与底层类全名相同名称的服务
$container->addService('\Webiik\Arr\Arr', function () { return new \Webiik\Arr\Arr(); });
- 在您的类控制器中使用全类名作为类型参数
public function __construct(\Webiik\Arr\Arr $array) { $this->array = $array; }
容器将搜索名称为
\Webiik\Arr\Arr
的服务。 - 向类注入依赖项
$myClass = new MyClass(...$container->injectTo('MyClass'));
按服务名注入服务
- 添加名称匹配以下正则表达式的服务
ws[A-Z]
$container->addService('wsArray', function () { return new \Webiik\Arr\Arr(); });
- 向您的类添加类名别名
use Webiik\Arr\Arr as wsArray;
- 在您的类控制器中添加带参数类型的文档块
/** * @param wsArray $array */ public function __construct(wsArray $array) { $this->array = $array; }
容器将搜索名称为
wsArray
的服务。 - 从容器向您的类注入依赖项
$myClass = new MyClass(...$container->injectTo('MyClass'));
注入函数或参数
- 添加任何名称的参数
$container->addFunction('myFnName', function() { echo 'Hello!'; });
- 在您的类构造函数中使用参数名称
public function __construct($myFnName) { $myFnName(); // Hello }
容器将搜索名称为
myParamName
的参数。 - 从容器向您的类注入依赖项
$myClass = new MyClass(...$container->injectTo('MyClass'));
注入容器本身
- 在您的类构造函数中使用完整的容器类名作为类型参数
public function __construct(\Webiik\Container\Container $container) { $this->container = $container; }
- 从容器向您的类注入依赖项
$myClass = new MyClass(...$container->injectTo('MyClass'));