lotos/container

2.0.0 2022-03-05 18:08 UTC

This package is auto-updated.

Last update: 2024-09-05 23:26:07 UTC


README

安装

composer require lotos/container

安装依赖

$collection = CollectionFactory::createCollection();
$repository = RepositoryFactory::createRepository($collection->newInstance());

$container = ContainerFactory::createContainer(
    repository: $repository,
    builder: BuilderFactory::createBuilder(
        repository: $repository,
        collection: $collection
    )
);

$container->saveClass(Lotos\Http\ServerRequestFactory::class)
    ->forInterface(Psr\Http\Message\ServerRequestFactoryInterface::class)
    ->withAlias('serverRequestFactory');

$container->saveClass(Lotos\Http\Strategies\JsonStrategy::class)
    ->forInterface(Lotos\Http\StrategyInterface::class)
    ->withPriority(1)
    ->withAlias('jsonStrategy');

$container->saveClass(Lotos\Http\Strategies\HtmlStrategy::class)
    ->forInterface(Lotos\Http\StrategyInterface::class)
    ->withAlias('htmlStrategy');

从容器中获取对象

$router = $container->get('router');

获取存储在容器中的对象的函数结果

$container->saveClass(Lotos\Http\ServerRequest\ServerRequest::class)
    ->forInterface(Psr\Http\Message\ServerRequestInterface::class)
    ->setInstance(
        $container->call('serverRequestFactory', 'fromGlobals')
    );

依赖注入

注意!

在当前版本中,删除了在对象属性中安装注入的能力,例如

class Example
{
    /**
     * @var Psr\Http\Message\RequestInterface
     * */
    private RequestInterface $request;
}

现在将不会工作,需要明确指出在哪个方法中注入

use Psr\Http\Message\{
    RequestInterface,
    ResponseInterface,
    ResponseFactoryInterface
};

class User
{
    public function __construct(
        private ResponseFactoryInterface $responseFactory
    )
    {}

    public function create(RequestInterface $request) : ResponseInterface
    {
        //...
    }

}