gacela-project/container

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

0.6.1 2024-07-06 11:15 UTC

This package is auto-updated.

Last update: 2024-09-06 11:35:38 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