wikimedia / services
基于即时化回调函数的懒加载方式管理命名服务的通用服务
3.0.0
2022-07-09 23:20 UTC
Requires
- php: >=7.2.9
- psr/container: ^1.1 || ^2.0
- wikimedia/scoped-callback: ^3.0 || ^4.0
Requires (Dev)
- mediawiki/mediawiki-codesniffer: 39.0.0
- mediawiki/mediawiki-phan-config: 0.11.1
- mediawiki/minus-x: 1.1.1
- ockcyp/covers-validator: 1.4.0
- php-parallel-lint/php-console-highlighter: 1.0.0
- php-parallel-lint/php-parallel-lint: 1.3.2
- phpunit/phpunit: ^8.5
Provides
- psr/container-implementation: 1.0.0
This package is auto-updated.
Last update: 2024-09-12 05:56:07 UTC
README
服务
一个遵循 PSR-11 的服务框架。服务通过即时化器(调用者)创建,这些调用者通常定义在独立的配置文件中。
使用方法
$services = new ServiceContainer(); $services->defineService( 'MyService', static function ( ServiceContainer $services ): MyService { return new MyService(); } ); $services->loadWiringFiles( [ 'path/to/ServiceWiring.php', ] );
当 ServiceWiring.php
如下所示时
return [ 'MyOtherService' => static function ( ServiceContainer $services ): MyOtherService { return new MyOtherService( $services->get( 'MyService' ) ); }, // ... ];
每个即时化器都接收服务容器作为第一个参数,它可以从中获取所需的其他服务。在构建 ServiceContainer
时可以指定每个即时化器的额外参数。
自定义 ServiceContainer
的子类可以提供更方便的服务访问
class MyServiceContainer extends ServiceContainer { public function getMyService(): MyService { return $this->get( 'MyService' ); } public function getMyOtherService(): MyOtherService { return $this->get( 'MyOtherService' ); } } // ServiceWiring.php return [ 'MyOtherService' => static function ( MyServiceContainer $services ): MyOtherService { return new MyOtherService( $services->getMyService() ); }, ];
运行测试
composer install --prefer-dist
composer test
历史
此库首次在 MediaWiki 1.27 (I3c25c0ac17) 中引入。它在 MediaWiki 1.33 和 MediaWiki 1.34 开发周期中从 MediaWiki 代码库中分离出来,并作为独立的库发布。