trifs / di
一个简单的依赖注入容器
v1.0.0
2014-07-30 12:39 UTC
Requires
- php: >=5.4
Requires (Dev)
- phpunit/phpunit: 4.*
This package is not auto-updated.
Last update: 2024-09-24 03:13:13 UTC
README
trifs/DI 是一个基于令人惊叹的 Pimple 内部结构的 PHP 简单依赖注入容器。然而,它是以对象的形式存在,而不是数组。它还提供了一些功能,例如保护参数、创建服务后的修改和获取服务创建函数。
安装
要将 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); });