apex/container

轻量级DI容器

安装次数: 1,073

依赖者: 8

建议者: 0

安全: 0

星标: 6

关注者: 2

分支: 0

公开问题: 0

类型:package

2.0.9 2024-01-11 16:30 UTC

This package is auto-updated.

Last update: 2024-09-11 18:10:52 UTC


README

这是一个轻量级、简单直接的依赖注入容器,它简单易用且性能良好。支持配置文件和所有标准注入方法——构造函数、setter、注解,以及属性。还包括一个Di包装类,允许以静态方式访问容器方法,从而提高简洁性和效率。

安装

使用Composer安装

composer require apex/container

基本用法

支持标准容器方法——has, get, set, make, call等。

use Apex\Container\Container;

$cntr = new Container('/path/to/definitions.php');

// Set and get
$cntr->set('full_name', 'John Doe');
// Get service
$logger = $cntr->get(LoggerInterface::class);
$logger->info("Here I am");

// Make and set
$user = $cntr->makeset(User::class, ['id' => 311]);

// Call via method setter injection
$cntr->call([$user, 'updateStatus'], ['status' => 'inactive']);

构造函数

构造函数接受以下参数,均不是必需的。

标记项目为服务

您必须明确标记必要的项目为服务,这意味着它们第一次从容器中检索时,将自动实例化,并设置新对象实例以供未来使用。从容器中检索未标记为服务的可实例化项目将简单地返回类名/闭包,而不会实例化对象。

您可以使用markItemAsService()方法轻松地将项目标记为服务,例如

use Apex\Container\Container;
use Apex\Psr\Log\LoggerInterface;

$cntr = new Container();
$cntr->markItemAsService(LoggerInterface::class);
$cntr->markItemAsService('debugger');

方法

以下基本方法得到支持,如所有容器。

单例Di类

此包包含一个Di类,作为单例使用,允许以静态方式访问容器方法,而不是在类与类、方法与方法之间传递容器对象。这样做是为了提供效率和简洁,并假设您正在每个请求中管理一个DI容器。

修改/src/Di.php文件中的属性,因为它们用作容器的构造函数参数。以下是一个示例用法。

namespace myApp;

use Apex\Container\Di;
use myApp\Users\User;

// Get logger
$logger = Di::get(LoggerInterface::Class);

// Make user object
Di::make(User::class, ['id' => 52]);

// Set and get variable
Di::set('full_name', 'John Doe');
$name = Di::get('full_name');   // John Doe

关注Apex

未来将会有许多好事,包括新的高质量开源包、更高级的文章/教程,涵盖实用的主题等。通过加入我们网站上的邮件列表或关注Twitter上的@mdizak1来保持最新信息。