exan/container

通用的容器实现

1.0.1 2023-05-25 14:21 UTC

This package is auto-updated.

Last update: 2024-09-25 17:49:02 UTC


README

一个最小的PSR-11兼容容器。在可能的情况下自动解决依赖。

安装

composer require exan/container

使用方法

$container = new Exan\Container();

$someClass = $container->get(SomeClass::class);

这将尝试为您实例化一个SomeClass实例并返回它。如果您稍后再次请求此类,它将返回相同的实例。

假设没有无法解决的依赖,它还将解决嵌套依赖。

class SomeClass
{
    public function __construct(public readonly Dependency $dependency)
    {
        // ...
    }
}

$container = new Exan\Container();

$someClass = $container->get(SomeClass::class);

此示例中的SomeClass将使用Dependency实例进行实例化。

它也可以处理接口,但不能自动解决该接口的实现。您需要手动注册条目。

interface SomeInterface
{
    // ...
}

class SomeClass implements SomeInterface
{
    // ...
}

$container = new Exan\Container();

$container->register(SomeInterface::class, new SomeClass())

$someClass = $container->get(SomeInterface::class);

注意:它不会自动解决原始类型,如stringint