gacela-project/resolver

此包已被废弃,不再维护。作者建议使用gacela-project/container包。

一个极简的容器依赖解析器

0.7.0 2024-07-06 11:07 UTC

This package is auto-updated.

Last update: 2024-07-06 11:16:42 UTC


README

加塞容器

GitHub Build Status Scrutinizer Code Quality Scrutinizer Code Coverage Psalm Type-coverage Status MIT Software License

安装

composer require gacela-project/container

使用

通过类名获取实例。

您可以在构造函数中定义一个映射,将接口与您希望在发现接口时创建(或使用)的具体类关联起来。

容器

此容器将自动解析该类所有内部依赖项。根据依赖项类型,它会以不同的方式解析。

  • 原始类型:它将使用其默认值。
  • :它将实例化它,如果它们有依赖项,也将递归解析。
  • 接口:它们将根据通过容器构造函数注入的绑定进行解析。
$bindings = [
  AbstractString::class => StringClass::class,
  ClassInterface::class => new ConcreteClass(/* args */),
  ComplexInterface::class => new class() implements Foo {/** logic */},
  FromCallable::class => fn() => new StringClass('From callable'),
];

$container = new Container($bindings);

$instance = $container->get(YourClass::class);

//////////////////////////////////////////////
# Extra: you can resolve closures on-the-fly using the container bindings
$resolved = $container->resolve(function (ComplexInterface $i) {
    // your custom logic
    return $i->...; 
});

示例

Gacela 框架中的一个使用示例: AbstractClassResolver