crysalead / box
简约的依赖注入容器。
2.0.2
2016-02-18 15:29 UTC
Requires
- php: >=5.4
Requires (Dev)
- crysalead/kahlan: ~2.0
README
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);