简约的依赖注入容器。

2.0.2 2016-02-18 15:29 UTC

This package is auto-updated.

Last update: 2024-08-29 03:52:47 UTC


README

Build Status Code Coverage

Box 是一个依赖注入容器,它仅基于闭包定义来管理依赖。这种方法的特点是简单、易于使用且灵活。它还支持使用包装器进行延迟依赖解析。

API

创建依赖容器

$box = new Box();

设置服务

要在您的应用程序中共享唯一的服务,请使用 Box::service()。服务可以是类、实例、字符串或任何类型的值。

示例

$box->service('foo', new MyClass());

使用 Box::service() 定义的每个共享服务都可以通过 Box::get() 获取。

注意:如果使用闭包定义共享,闭包将只执行一次,结果将被返回给所有后续的 Box::get() 调用。

设置工厂

使用 Box::factory() 设置工厂。它可以是闭包

use MyClass;

$box->factory('foo', function($param1, $param2) {
	return new MyClass($param1, $param2);
});

或完全命名空间化的类名。

Box::factory('foo', 'otherNamespace\MyClass');

Box::factory() 将在解析时使用 Box::get() 创建定义的新实例。

解析依赖

要解析依赖,请使用 Box::get()

$box->get('foo', $param1, $param2);

所有 $paramX 都是可选参数,传递给闭包或直接传递给构造函数(如果定义是完全命名空间化的类名字符串)。

返回包装的依赖

包装依赖的优点是可以在不直接解析它的情况下注入依赖。为了能够延迟解析依赖,您需要使用 Box::wrap()

$box->wrap('foo', $param1, $param2);

所有 $paramX 都是可选参数,传递给闭包或直接传递给构造函数(如果定义是完全命名空间化的类名字符串)。

然后通过以下方式解析依赖

$dependency = $wrapper->get($param1, $param2);

所有 $paramX 都是可选的,并将覆盖包装步骤中设置的值。

清理

使用 Box::remove('foo') 删除特定依赖或使用 Box::clear() 删除所有依赖。

全局 API

您可以使用 box() 函数在任何地方获取/设置 DI。

设置器

$box = box('mynamespace', new Box());

获取器

$box = box('mynamespace');

取消设置 DI

$box = box('mynamespace', false);

清除所有内容。

$box = box(false);