phpbench/container

简单、可配置的服务容器。

2.2.2 2023-10-30 13:38 UTC

This package is auto-updated.

Last update: 2024-08-30 01:38:09 UTC


README

Build Status

简单、可扩展的依赖注入容器,具有参数和服务标记。实现了 容器互操作性

简单用法

$container = new Container();
$container->register('foobar', function (Container $container) {
    return new \stdClass();
});

扩展和标记

扩展类应该作为容器的第一个参数传递(用户配置是第二个参数)。

$container = new Container(
    [
        MyExtension::class
    ],
    [
        'foo.bar' => 'my_new_value',
    ]
);
$container->init(); // will trigger loading of the extensions.
class MyExtension implements ExtensionInterface
{
    public function load(Container $container)
    {
        $container->register('my_service', function (Container $container) {
            $service = new MyService(
                $container->getParameter('foo_bar'),
                $container->get('some_other_service')
            );

            foreach ($container->getServiceIdsForTag('tag') as $serviceId => $params) {
                $service->add($container->get($serviceId));
            }

            return $service;
        });

        $container->register('tagged_service', function (Container $container) {
            return new MyService(
                $container->getParameter('foo_bar'),
                $container->get('some_other_service')
            );
        }, [ 'tag' => [ 'param1' => 'foobar' ]);
    }

    /**
     * Return the default parameters for the container.
     *
     * @return array
     */
    public function getDefaultConfig()
    {
        return [
            'foo_bar' => 'this is foo'
        ];
    }
}