buffalokiwi/buffalotools_ioc

PHP 8 的 IOC / 服务定位器

v1.0.12 2021-08-20 22:40 UTC

This package is auto-updated.

Last update: 2024-09-21 05:12:38 UTC


README

一个快速、简单、直接的 PHP 7.4 反转控制/服务定位器库。

MIT 许可证

安装

composer require buffalokiwi/buffalotools_ioc

基础知识

此容器将维护任何已注册服务的单个引用。

  1. 通过调用 addInterface() 注册服务。提供的闭包包含调用 new class() 的调用。
  2. 按需实例化服务,除非调用 newInstance(),否则不会创建任何实例。
  3. 调用 getIntance() 将调用 newInstance() 一次并缓存结果。
  4. 后续对 getIntance() 的调用将返回缓存的实例。
  5. 此容器不打算传递给各种类。
  6. 所有服务应在单个位置(组合根)注册,并应通过某些路由器自动注入到构造函数中。
  7. 在构建容器时,指定严格模式将测试提供给 addInstance() 的闭包返回的实例是否与调用 newInstance() 时提供的接口匹配。

示例

//..Create the IOC container
$ioc = new IOC();

//..Add some interface to the container, and supply a factory for creating new instances 
$ioc->addInterface( \namespace\to\SomeAmazingClass::class, function() {
  return new SomeAmazingClass();
});

//..Retrieve the class instance by supplying the same interface or class name as supplied to addInterface()
$amazing = $ioc->getInstance( \namespace\to\SomeAmazingClass::class );

注意:使用 ::class 后缀是到完全命名空间类名的快捷方式,并且不会触发自动加载器。

注意 2:在将对象注册到容器时,不要添加 "use" 语句。这将会触发自动加载器。

始终使用完全命名空间的类或接口名称(最好是接口)。

自动装配方法

容器包含一个 autowire() 方法。这将尝试自动确定某些类构造函数的值。可以将变量作为命名映射传递到 arg#2 作为参数。

参数映射器

可以将 IArgumentMapper 的实例提供给 IOC 类的构造函数。当调用 autowire() 时,首先检查是否存在与提供给 autowire() 的类/接口名称匹配的映射器。如果找到,则将映射器中包含的参数与提供给 autowire() 的 $args 数组合并,$args 优先。这可以用来将某些配置元素移动到不同的位置。