jopic/jdi

简单的依赖注入框架

1.0.0 2015-03-29 08:58 UTC

This package is auto-updated.

Last update: 2024-09-15 22:01:53 UTC


README

Build Status

此仓库为PHP提供了一个非常基础且易于使用的依赖注入“框架”。

安装

您基本上只需要将以下依赖项 "jopic/jdi": "1.0.0" 添加到您的 composer.json 文件中。

用法 - 容器设置

首先,您需要设置您的依赖容器

$container = new Jopic\DI\Container();

然后,您可以通过以下方式将此容器设置为依赖注入的激活容器:

\Jopic\DI\DependencyInjection::getInstance()->setContainer($container);

用法 - 容器对象注册

为了能够将对象注入类字段,依赖注入容器需要知道关于可注入对象的信息。因此,您需要通过调用 register 方法在容器上注册它们。


$container->register("foo", function() {
    return new DummyObject();
});

请注意:注册一个闭包函数(用于对象实例化)非常重要。

用法 - 对象注入

基本上,您只需要做以下三件事

  1. 扩展抽象类 JDIBaseClass
  2. 在您的类构造函数中调用 parent::__construct($this);
  3. 使用 @inject 注解您的类中的注入字段

以下是一个可注入类的简短示例

class SampleClass extends Jopic\DI\JDIBaseClass {
    /**
     * @inject
     */
    private $foo;
    
    public function __construct() {
        parent::__construct($this);
    }
}

此代码确保如果依赖注入容器中注册了名为 "foo" 的对象,则它将自动可用于此类的实例。

懒加载注入

如果您将属性定义为受保护的,则 JDIBaseClass 的类构造函数将自动以懒加载方式注入此属性。这意味着属性闭包仅在第一次使用属性之前执行。

以下是一个带有直接注入和懒加载属性的类的简短示例

class SampleClass extends Jopic\DI\JDIBaseClass {
    /**
     * this value gets injected on constructor call
     * @inject
     */
    private $foo;
    
    /**
     * this value gets injected just before the first getFoo2() call
     * @inject
     **/
    protected $foo2;
    
    public function __construct() {
        parent::__construct($this);
    }
    
    public function getFoo() {
        return $this->foo;
    }
    
    public function getFoo2() {
        return $this->foo2;
    }
}

评论请求

如果您发现任何错误,或者发现某些(或全部)不方便的地方,请通过 github 或电子邮件(admin [at] jopic.at)直接联系我。