guide42/suda

值和依赖注入注册表

0.17.0 2020-06-11 02:32 UTC

This package is auto-updated.

Last update: 2024-09-25 07:22:43 UTC


README

Suda 是一个轻量级的容器,用于您的服务。

快速开始

创建和配置注册表就像提供一个关联数组,将一个类映射到工厂或键映射到参数值一样简单。

$di = new suda\Registry([
    MovieFinder::class => function(callable $make) {
        return new MovieFinder;
    },
    MovieLister::class => function(callable $make, MovieFinder $finder) {
        return new MovieLister($finder);
    },
]);

所有对象都是在第一次请求时使用工厂创建的,并且每次查找都会返回相同的实例。

$finder0 = $di[MovieFinder::class];
$finder1 = $di[MovieFinder::class];

assert($finder0 === $finder1);

工厂

任何接受一个 make 函数作为第一个参数的可调用对象都是工厂,其他参数作为依赖项解析。它的目的是在请求类或接口时创建对象。

工厂可以堆叠并按中间件方式调用。当 make 函数不带参数调用时

  • 如果堆叠,则调用上一个工厂,
  • 或者尝试创建具体类键的对象,解析其依赖项。
$di[ConcreteHouse::class] = function(callable $make) {
    $house = $make(); // creates the object resolving dependencies
    return $house;
};
$di[ConcreteHouse::class] = function(callable $make) {
    $house = $make(); // calls the previous factory
    $house->build();
    return $house;
};

make 函数还可以用于使用参数创建任何类

$di[NumberValidatorInterface::class] = function(callable $make) {
    return $make(BCNumberValidator::class, ['min' => 5]);
};

API

$di = new Registry;                                    // creates empty registry
$di = new Registry(array $values);                     // ... with assoc-array containing values or factories
$di = new Registry(array $values, Registry $delegate); // ... with registry to delegate dependencies

$di[string $classOrInterface] = callable $factory;     // stores a factory for abstract
$di[string $key] = mixed $value;                       // stores a parameter

$di(callable $fn);                                     // call a function resolving it's parameters
$di(callable $fn, array $arguments);                   // ... with given arguments

$di->freeze();                                         // disallow to store values or factories
$di->freeze(string $key);                              // ... for this entry key

徽章

Latest Stable Version Build Status Coverage Status