trifs/di

一个简单的依赖注入容器

v1.0.0 2014-07-30 12:39 UTC

This package is not auto-updated.

Last update: 2024-09-24 03:13:13 UTC


README

trifs/DI 是一个基于令人惊叹的 Pimple 内部结构的 PHP 简单依赖注入容器。然而,它是以对象的形式存在,而不是数组。它还提供了一些功能,例如保护参数、创建服务后的修改和获取服务创建函数。

Build Status

安装

要将 trifs/DI 包含到您的项目中,请将其添加到您的 composer.json 文件中

{
    "require": {
        "trifs/di": "~1.0"
    }
}

用法

创建容器就像实例化它一样简单

use trifs\DI;

$container = new Container();

与其他依赖注入容器一样,trifs\DI 能够管理两种不同的数据:服务和参数。

定义参数

$container->cookie_name = 'SESSION_ID';
$container->session_storage_class = 'SessionStorage';

定义服务

服务是一个对象,它作为更大系统的一部分执行某些操作,例如:数据库连接、会话处理器等。

服务是通过返回对象实例的匿名函数定义的

$container->session_storage = function (Container $container) {
    return new $container->session_storage_class($container->cookie_name);
};

$container->session = function (Container $container) {
    return new Session($c['session_storage']);
};

请注意,匿名函数可以访问当前容器实例,允许引用其他服务或参数。

由于对象只有在获取它们时才会创建,因此定义的顺序无关紧要,且没有性能损失。

使用定义的服务也很简单

// get the session object
$session = $container->session;

// the above call is roughly equivalent to the following code:
// $storage = new SessionStorage('SESSION_ID');
// $session = new Session($storage);

扩展容器

如果您反复使用相同的库,您可能希望将一些服务从一项项目重用到另一项;通过实现 trifs\DI\ServiceProviderInterface 将服务打包到一个提供者中

use trifs\DI\Container;
use trifs\DI\ServiceProviderInterface;

class FooProvider implements ServiceProviderInterface
{
    public function register(Container $container)
    {
        // register services and parameters
    }
}

然后注册它

$container->register(new FooProvider());

定义工厂服务

默认情况下,每次获取服务时,trifs\DI 都返回相同的实例。如果您希望对于所有调用返回不同的实例,请使用 factory() 方法包装您的匿名函数

$container->session = $container->factory(function (Container $container) {
    return new Session($container->session_storage);
});