weebel/container

简单、最小化但功能强大的容器

0.1.2 2023-01-20 22:03 UTC

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);