X-Git-Url: http://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2FServiceWiring.php;h=e0db05b6c8cecb89bc4ee2c0fffc9375b319cd0a;hp=689a98e482a33699aff4d6a3bc4fbd15d597eeac;hb=c8987d7c3e30a7d1c2e917cb6a9b0114281703e8;hpb=b8c23cf81ec89f97ecc975b714260f634407f10f diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php index 689a98e482..e0db05b6c8 100644 --- a/includes/ServiceWiring.php +++ b/includes/ServiceWiring.php @@ -27,6 +27,13 @@ * For every service that MediaWiki core requires, an instantiator must be defined in * this file. * + * Note that, ideally, all information used to instantiate service objects should come + * from configuration. Information derived from the current request is acceptable, but + * only where there is no feasible alternative. It is preferred that such information + * (like the client IP, the acting user's identity, requested title, etc) be passed to + * the service object's methods as parameters. This makes the flow of information more + * obvious, and makes it easier to understand the behavior of services. + * * @note As of version 1.27, MediaWiki is only beginning to use dependency injection. * The services defined here do not yet fully represent all services used by core, * much of the code still relies on global state for this accessing services. @@ -100,7 +107,7 @@ return [ $services->getDBLoadBalancerFactory(), $services->getExternalStoreAccess(), $services->getMainWANObjectCache(), - new ServiceOptions( BlobStoreFactory::$constructorOptions, + new ServiceOptions( BlobStoreFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig() ), $services->getContentLanguage() ); @@ -109,9 +116,10 @@ return [ 'BlockManager' => function ( MediaWikiServices $services ) : BlockManager { return new BlockManager( new ServiceOptions( - BlockManager::$constructorOptions, $services->getMainConfig() + BlockManager::CONSTRUCTOR_OPTIONS, $services->getMainConfig() ), - $services->getPermissionManager() + $services->getPermissionManager(), + LoggerFactory::getInstance( 'BlockManager' ) ); }, @@ -191,7 +199,7 @@ return [ $lbConf = MWLBFactory::applyDefaultConfig( $mainConfig->get( 'LBFactoryConf' ), - new ServiceOptions( MWLBFactory::$applyDefaultConfigOptions, $mainConfig ), + new ServiceOptions( MWLBFactory::APPLY_DEFAULT_CONFIG_OPTIONS, $mainConfig ), $services->getConfiguredReadOnlyMode(), $services->getLocalServerObjectCache(), $services->getMainObjectStash(), @@ -199,10 +207,7 @@ return [ ); $class = MWLBFactory::getLBFactoryClass( $lbConf ); - $instance = new $class( $lbConf ); - MWLBFactory::setSchemaAliases( $instance, $mainConfig->get( 'DBtype' ) ); - - return $instance; + return new $class( $lbConf ); }, 'EventRelayerGroup' => function ( MediaWikiServices $services ) : EventRelayerGroup { @@ -266,6 +271,8 @@ return [ if ( defined( 'MW_NO_SESSION' ) ) { return $services->getLinkRendererFactory()->create(); } else { + // Normally information from the current request would not be passed in here; + // this is an exception. (See also the class documentation.) return $services->getLinkRendererFactory()->createForUser( RequestContext::getMain()->getUser() ); @@ -280,6 +287,36 @@ return [ ); }, + 'LocalisationCache' => function ( MediaWikiServices $services ) : LocalisationCache { + $conf = $services->getMainConfig()->get( 'LocalisationCacheConf' ); + + $logger = LoggerFactory::getInstance( 'localisation' ); + + $store = LocalisationCache::getStoreFromConf( + $conf, $services->getMainConfig()->get( 'CacheDirectory' ) ); + $logger->debug( 'LocalisationCache: using store ' . get_class( $store ) ); + + return new $conf['class']( + new ServiceOptions( + LocalisationCache::CONSTRUCTOR_OPTIONS, + // Two of the options are stored in $wgLocalisationCacheConf + $conf, + // In case someone set that config variable and didn't reset all keys, set defaults. + [ + 'forceRecache' => false, + 'manualRecache' => false, + ], + // Some other options come from config itself + $services->getMainConfig() + ), + $store, + $logger, + [ function () use ( $services ) { + $services->getResourceLoader()->getMessageBlobStore()->clear(); + } ] + ); + }, + 'LocalServerObjectCache' => function ( MediaWikiServices $services ) : BagOStuff { $config = $services->getMainConfig(); $cacheId = ObjectCache::detectLocalServerCache(); @@ -514,6 +551,17 @@ return [ ); }, + 'PasswordReset' => function ( MediaWikiServices $services ) : PasswordReset { + $options = new ServiceOptions( PasswordReset::CONSTRUCTOR_OPTIONS, $services->getMainConfig() ); + return new PasswordReset( + $options, + AuthManager::singleton(), + $services->getPermissionManager(), + $services->getDBLoadBalancer(), + LoggerFactory::getInstance( 'authentication' ) + ); + }, + 'PerDbNameStatsdDataFactory' => function ( MediaWikiServices $services ) : StatsdDataFactoryInterface { $config = $services->getMainConfig(); @@ -527,7 +575,7 @@ return [ 'PermissionManager' => function ( MediaWikiServices $services ) : PermissionManager { return new PermissionManager( new ServiceOptions( - PermissionManager::$constructorOptions, $services->getMainConfig() + PermissionManager::CONSTRUCTOR_OPTIONS, $services->getMainConfig() ), $services->getSpecialPageFactory(), $services->getRevisionLookup(), @@ -538,7 +586,7 @@ return [ 'PreferencesFactory' => function ( MediaWikiServices $services ) : PreferencesFactory { $factory = new DefaultPreferencesFactory( new ServiceOptions( - DefaultPreferencesFactory::$constructorOptions, $services->getMainConfig() ), + DefaultPreferencesFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig() ), $services->getContentLanguage(), AuthManager::singleton(), $services->getLinkRendererFactory()->create(), @@ -632,7 +680,7 @@ return [ $services->getCommentStore(), $services->getActorMigration(), $config->get( 'MultiContentRevisionSchemaMigrationStage' ), - LoggerFactory::getProvider(), + LoggerFactory::getInstance( 'RevisionStore' ), $config->get( 'ContentHandlerUseDB' ) ); @@ -783,7 +831,8 @@ return [ $services->getDBLoadBalancer(), $services->getCommentStore(), $services->getActorMigration(), - $services->getWatchedItemStore() + $services->getWatchedItemStore(), + $services->getPermissionManager() ); },