weebel / container
简单、最小化但功能强大的容器
0.1.2
2023-01-20 22:03 UTC
Requires
- psr/container: ^2.0
- weebel/contracts: dev-master
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.13
- mockery/mockery: ^1.5
- phpunit/phpunit: ^9.5
- roave/security-advisories: dev-latest
- symfony/var-dumper: ^6.0
This package is not auto-updated.
Last update: 2024-09-28 06:04:02 UTC
README
简单、最小化但功能强大的容器
安装
使用 composer
composer require weebel/container
用法
您必须使用以下命令创建容器实例
$container = \Weebel\Container\Container::getInstance();
假设我们有一个名为 App\UserBuilder 的服务
namespace App; class UserBuilder { public function __construct(public UserRepositoryInterface $userRepository, public string $type) { } }
现在设置实例
$container->set('user_builder', new App\UserBuilder()); $container->set('user_builder', fn()=>new App\UserBuilder());
通过 id 从容器中获取服务
$container->get('user_builder'); $container->get(App\UserBuilder::class);
设置别名
$container->alias('user_builder', App\UserBuilder::class); $container->alias(App\UserBuilderInterface::class, App\UserBuilder::class);
- 记住,在定义别名时,两个键的结果完全相同,这意味着
为服务定义多个实例或标签
$container->set('user_builder', App\UserBuilder::class); $container->set('admin_user_builder', App\UserBuilder::class);
为实例或标签设置参数
$container->addArgument('admin_user_builder', 'type', 'admin'); $container->addArgument(App\UserBuilder::class, 'type', 'normal');
如果您想使用标签作为参数,必须在名称前使用 '@'。否则,它将被视为字符串
$container->set('admin_repository', AdminRepository::class); $container->addArgument(App\UserBuilder::class, 'userRepository', '@admin_repository'); $container->addArgument(App\UserBuilder::class, 'userRepository', fn(\Psr\Container\ContainerInterface $container)=> $container->get(AdminRepository::class)); $container->addArgument(App\UserBuilder::class, 'userRepository', '@'.AdminRepository::class);