属性依赖注入容器

1.1.7 2021-02-09 10:40 UTC

This package is auto-updated.

Last update: 2024-09-14 14:09:12 UTC


README

Build Status

PDIC

一个轻量级但强大的通过公共属性进行依赖注入的容器,使用依赖关系图

安装

在您的项目中使用 PDIC 之前,请将其添加到 composer.json 文件中

./composer.phar require cheevauva/pdic "1.1.*"

使用

声明服务

服务是一个对象,它作为更大系统的一部分执行某些操作。服务的示例:数据库连接、模板引擎或邮件程序

$map = [
    '?session_storage' => SessionStorage::class,
    '?session' => Session::class,
    SessionStorage::class => [
        '^1' => '@sessionId',
    ],
    Session::class => [
        '^1' => '?session_storage'
    ],
];
$container = new \PDIC\Container($map, [
    'sessionId' => 'SESSION_ID',
]);

由于对象仅在您获取它们时才会创建,因此定义顺序无关紧要。

使用特定服务非常简单

$container->get('session');

上述调用大致等同于以下代码

$storage = new SessionStorage('SESSION_ID');
$session = new Session($storage);

声明工厂服务

默认情况下,每次您获取服务时,PDIC 都返回相同的实例。如果您希望对于所有调用都返回不同的实例,请按以下方式声明依赖关系图

$map = [
    '?session_storage' => SessionStorage::class,
    '?session' => '*' . Session::class,
    SessionStorage::class => [
        '^1' => '@sessionId',
    ],
    Session::class => [
        '^1' => '?session_storage'
    ],
];

现在每次调用

$container->get('session');

返回一个新的 Session 实例

声明参数

定义参数可以简化您容器中实体设置的过程。参数在创建容器实例时传递

$container = new \PDIC\Container([
    '?filesystem' => Filesystem::class,
    Filesystem::class => [
        '^1' => '@basePath',
    ]
], [
    'basePath' => __DIR__ . '/',
]);