guide42/ suda
值和依赖注入注册表
0.17.0
2020-06-11 02:32 UTC
Requires
- php: >=7.2
Requires (Dev)
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