ytake/hh-container
Composer 安装命令:
composer require ytake/hh-container
包简介
simple light weight service location / dependency injection container
关键字:
README 文档
README
HH-Container
simple light weight service location / dependency injection container
Installation
$ hhvm $(which composer) require ytake/hh-container
"require": { "hhvm": ">=3.24", "ytake/hh-container": "^1.0" },
Usage
$container = new \Ytake\HHContainer\FactoryContainer(); $container->set('testing', $container ==> 'testing'); $container->get('testing'); // return string
Singleton or Prototype
default prototype
SINGLETON
$container = new \Ytake\HHContainer\FactoryContainer(); $container->set('scope:singleton', $container ==> new \stdClass(), \Ytake\HHContainer\Scope::Singleton);
PROTOTYPE
$container = new \Ytake\HHContainer\FactoryContainer(); $container->set('scope:prototype', $container ==> new \stdClass(), \Ytake\HHContainer\Scope::Prototype);
Dependency Injection
set parameters
sample class
final class MessageClass { public function __construct( protected string $message ) {} public function message(): string { return $this->message; } } final class MessageClient { public function __construct( protected MessageClass $message ) {} public function message(): MessageClass { return $this->message; } }
Inject
$container = new \Ytake\HHContainer\FactoryContainer(); $container->set('message.class', $container ==> new MessageClass('testing')); $container->set(MessageClient::class, $container ==> { $instance = $container->get('message.class'); invariant($instance instanceof MockMessageClass, 'error'); new MessageClient($instance); }); $instance = $container->get(MessageClient::class);
callable
returns the value of a callable with parameters supplied at calltime.
final class TestingInvokable { public function __invoke(FactoryContainer $container): int { return 1; } } $container = new \Ytake\HHContainer\FactoryContainer(); $container->set(TestingInvokable::class, $container ==> $container->callable( new \Ytake\HHContainer\Invokable( new TestingInvokable(), '__invoke', $container ) ) );
Use modules
use Ytake\HHContainer\ServiceModule; use Ytake\HHContainer\FactoryContainer; class ExampleModule extends ServiceModule { public function provide(FactoryContainer $container): void { $container->set('example', $container ==> new \stdClass()); } }
$container = new \Ytake\HHContainer\FactoryContainer(); $container->register(ExampleModule::class); $container->lockModule();
Service Factory
use Ytake\HHContainer\Scope; use Ytake\HHContainer\ServiceFactory; use Ytake\HHContainer\FactoryContainer; use Ytake\HHContainer\FactoryInterface; class StringFactory implements FactoryInterface { const type T = string; public function provide(FactoryContainer $_container): StringFactory::T { return 'testing'; } public function scope(): Scope { return Scope::Singleton; } public function name(): string { return 'testing' } } $factory = new ServiceFactory(new FactoryContainer()); $factory->registerFactory(new StringFactory()); $factory->create('testing');
统计信息
- 总下载量: 575
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 2
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2017-10-31