dariorieke/dependency-injection

此软件包最新版本(dev-master)没有提供许可证信息。

实现PSR-11接口的依赖注入容器

dev-master 2022-02-03 16:54 UTC

This package is auto-updated.

Last update: 2024-08-29 05:24:56 UTC


README

实现PSR-11容器接口的依赖注入容器

安装

使用composer安装

    "require": {
        "dariorieke/dependency-injection": "dev-master"
    }

运行测试

使用以下命令运行测试

./vendor/bin/phpunit .\tests

用法

注册依赖项

依赖项通过返回依赖项的函数进行注册,这些函数可以是任何接收容器作为参数的callable,这允许您在创建时将依赖项注入到其他依赖项中。正常依赖项总是返回类的新的实例,与单例相比。


use DarioRieke\DependencyInjection\DependencyInjectionContainer;

$container = new DependencyInjectionContainer();

//register a queue
$container->register('queue', function ($container) {
	return new SplQueue();
});

注册单例

要注册一个单例,其中容器总是返回依赖项的相同实例(在本例中为Logger),


use DarioRieke\DependencyInjection\DependencyInjectionContainer;

$container = new DependencyInjectionContainer();

$container->singleton('logger', function ($container) {
	return new Logger();
});

检索依赖项

从容器中检索依赖项很简单。使用hasget方法来检索单例和正常依赖项

if($container->has('logger')) {
	$logger = $container->get('logger');
}

注册和检索参数

您还可以注册和检索参数,例如配置值

$container->setParameter('debug', true);

if($container->hasParameter('debug')) {
	$debugMode = $container->getParameter('debug');
}

向依赖项添加方法调用

您可能想要注册一个依赖项并使用setter方法注入另一个依赖项。这可以在注册函数内部完成,但您也可以更灵活地完成。addMethodCall接收方法调用参数的数组

$container->addMethodCall('myDependency', 'setLogger', [ $container->get('logger') ]);

依赖项别名

您可以使用别名名称注册依赖项,例如接口名称,并通过其别名检索它。

$container->alias('logger', LoggerInterface::class);