lotos / container
2.0.0
2022-03-05 18:08 UTC
Requires
- php: ^8.0
- lotos/builder: ^2.0.0
- lotos/collection: ^2.0.0
- lotos/repository: ^2.0.0
- php-ds/php-ds: ^1.4.0
- psr/container: ^2.0.0
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 { //... } }