nazg / glue
HHVM/Hack 的依赖注入容器
1.5.1
2020-07-02 23:22 UTC
Requires
- hhvm: ^4.62
- hhvm/hhvm-autoload: ^3.0
- hhvm/hsl: ^4.0
- hhvm/hsl-experimental: ^4.25
Requires (Dev)
- facebook/fbexpect: ^2.7
- hhvm/hacktest: ^2.0
- hhvm/hhast: ^4.0
README
Hack 的依赖注入容器
要求
HHVM 4.35.0 及以上。
安装
Composer 是推荐的安装方法。
要将 Nazg\Glue 添加到您的项目中,请将以下内容添加到您的 composer.json 中,然后重新运行 composer:
"require": { "nazg/glue": "^1.4" }
使用 HHVM 运行 Composer 命令如下:
$ composer install
此外,您需要将 hhvm-autoload 作为自动加载器使用。
或者
$ composer require nazg/glue
使用方法
第一步
创建类
interface AnyInterface { }
final class Any implements AnyInterface { // any }
绑定
use type Nazg\Glue\Container; use type Nazg\Glue\Scope; $container = new Container(); $container->bind(AnyInterface::class) ->to(Mock::class) ->in(Scope::PROTOTYPE); \HH\Asio\join($container->lockAsync());
依赖项将被自动解决
$container->get(AnyInterface::class);
作用域
使用 Nazg\Glue\Scope
枚举。
enum Scope : int { PROTOTYPE = 0; SINGLETON = 1; }
提供者
使用 \Nazg\Glue\ProviderInterface。
use type Nazg\Glue\ProviderInterface; final class AnyProvider implements ProviderInterface<AnyInterface> { public function get(): AnyInterface { return new Any(); } }
$container->bind(AnyInterface::class) ->provider(new AnyProvider();
绑定序列化缓存
use type Nazg\Glue\ContainerBuilder; $builder = new ContainerBuilder(true, 'apc.cache.key.name'); // return a \Nazg\Glue\CachedContainer Instance $container = $builder->make();