Clone this repo:
  1. 4212516 build: Updating mediawiki/mediawiki-phan-config to 0.15.0 by libraryupgrader · 3 weeks ago master
  2. 87f7113 composer.json: Minor bumps by Reedy · 8 weeks ago 4.0.0
  3. d47812b build: Updating mediawiki/mediawiki-codesniffer to 45.0.0 by libraryupgrader · 9 weeks ago
  4. 26dbce1 composer.json: Allow wikimedia/scopedcallback ^5.0 by Reedy · 10 weeks ago
  5. 85853d3 build: Updating mediawiki/mediawiki-codesniffer to 44.0.0 by libraryupgrader · 5 months ago

Latest Stable Version License

Services

A PSR-11-compliant services framework. Services are created by instantiators (callables), which are usually defined in separate wiring files.

Usage

$services = new ServiceContainer();

$services->defineService(
    'MyService',
    static function ( ServiceContainer $services ): MyService {
        return new MyService();
    }
);

$services->loadWiringFiles( [
    'path/to/ServiceWiring.php',
] );

Where ServiceWiring.php looks like this:

return [

    'MyOtherService' => static function ( ServiceContainer $services ): MyOtherService {
        return new MyOtherService( $services->get( 'MyService' ) );
    },

    // ...

];

Each instantiator receives the service container as the first argument, from which it may retrieve further services as needed. Additional arguments for each instantiator may be specified when constructing the ServiceContainer.

Custom subclasses of ServiceContainer may offer easier access to certain services:

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() );
    },

];

Running tests

composer install --prefer-dist
composer test

History

This library was first introduced in MediaWiki 1.27 (I3c25c0ac17). It was split out of the MediaWiki codebase and published as an independent library during the MediaWiki 1.33 and MediaWiki 1.34 development cycles.


  NODES
3d 1
composer 4
os 4