wikimedia/services

基于即时化回调函数的懒加载方式管理命名服务的通用服务

3.0.0 2022-07-09 23:20 UTC

This package is auto-updated.

Last update: 2024-09-12 05:56:07 UTC


README

Latest Stable Version License

服务

一个遵循 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.33MediaWiki 1.34 开发周期中从 MediaWiki 代码库中分离出来,并作为独立的库发布。