gacela-project / container
一个极简的容器依赖解析器
0.6.1
2024-07-06 11:15 UTC
Requires
- php: >=8.1
- psr/container: >=1.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.59
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^10.5
- psalm/plugin-phpunit: ^0.18
- symfony/var-dumper: ^5.4
- vimeo/psalm: ^5.25
README
安装
composer require gacela-project/container
使用
通过类名获取实例。
您可以在接口和您希望创建(或使用)的具体类之间定义一个映射,当通过构造函数进行自动装配过程中找到该接口时。
容器
此容器将自动解析该类内部的所有依赖。根据依赖的类型,将以不同的方式解析它
原始类型
:它将使用其默认值类
:它将实例化它,如果它们有依赖项,它们也将递归解析。接口
:它们将根据通过容器的构造函数注入的 绑定 进行解析。
$bindings = [ AbstractString::class => StringClass::class, ClassInterface::class => new ConcreteClass(/* args */), ComplexInterface::class => new class() implements Foo {/** logic */}, FromCallable::class => fn() => new StringClass('From callable'), ]; $container = new Container($bindings); $instance = $container->get(YourClass::class); ////////////////////////////////////////////// # Extra: you can resolve closures on-the-fly using the container bindings $resolved = $container->resolve(function (ComplexInterface $i) { // your custom logic return $i->...; });
示例
在 Gacela 框架中的使用示例: AbstractClassResolver