wikimedia/mediawiki-core

View on GitHub
includes/Hook/MediaWikiServicesHook.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace MediaWiki\Hook;

use MediaWiki\MediaWikiServices;

/**
 * This is a hook handler interface, see docs/Hooks.md.
 * Use the hook name "MediaWikiServices" to register handlers implementing this interface.
 *
 * @warning Implementations of this interface must not have services injected into
 * their constructor! This is because this hook runs while the service container is
 * still being initialized, so any services it asks for might get instantiated based on
 * incomplete configuration and wiring.
 *
 * @stable to implement
 * @ingroup Hooks
 */
interface MediaWikiServicesHook {
    /**
     * This hook is called when a global MediaWikiServices instance is initialized.
     * Extensions may use this to define, replace, or wrap services. However, the
     * preferred way to define a new service is the $wgServiceWiringFiles array.
     *
     * @warning Implementations must not immediately access services instances from the
     * service container $services, since the service container is not fully initialized
     * at the time when the hook is called. However, callbacks that are used as service
     * instantiators or service manipulators may access service instances.
     *
     * Example:
     * @code
     * function onMediaWikiServices( $services ) {
     *     // The service wiring and configuration in $services may be incomplete at this time,
     *     // do not access services yet!
     *     // At this point, we can only manipulate the wiring, not use it!
     *
     *     $services->defineService(
     *        'MyCoolService',
     *         function( MediaWikiServices $container ) {
     *             // It's ok to access services inside this callback, since the
     *             // service container will be fully initialized when it is called!
     *             return new MyCoolService( $container->getPageLookup() );
     *         }
     *     );
     *
     *     $services->addServiceManipulator(
     *         'SlotRoleRegistry',
     *         function ( SlotRoleRegistry $service, MediaWikiServices $container ) {
     *             // ...
     *         }
     *     );
     *
     *     $services->redefineService(
     *         'StatsdDataFactory',
     *         function ( MediaWikiServices $container ) {
     *             // ...
     *         }
     *     );
     * }
     * @endcode
     *
     * @since 1.35
     *
     * @param MediaWikiServices $services
     * @return bool|void True or no return value to continue or false to abort
     */
    public function onMediaWikiServices( $services );
}