apex / container
轻量级DI容器
2.0.9
2024-01-11 16:30 UTC
Requires
- php: >=8.1
- psr/container: ^2.0
Requires (Dev)
- apex/signer: ^2.0
- phpunit/phpunit: ^9.5
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来保持最新信息。