* 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.
use MediaWiki\Linker\LinkRendererFactory;
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MediaWikiServices;
+use Wikimedia\Message\IMessageFormatterFactory;
+use MediaWiki\Message\MessageFormatterFactory;
use MediaWiki\Page\MovePageFactory;
use MediaWiki\Permissions\PermissionManager;
use MediaWiki\Preferences\PreferencesFactory;
return [
'ActorMigration' => function ( MediaWikiServices $services ) : ActorMigration {
- return new ActorMigration(
- $services->getMainConfig()->get( 'ActorTableSchemaMigrationStage' )
- );
+ return new ActorMigration( SCHEMA_COMPAT_NEW );
},
'BadFileLookup' => function ( MediaWikiServices $services ) : BadFileLookup {
},
'BlockManager' => function ( MediaWikiServices $services ) : BlockManager {
- $context = RequestContext::getMain();
return new BlockManager(
new ServiceOptions(
BlockManager::$constructorOptions, $services->getMainConfig()
),
- $context->getUser(),
- $context->getRequest(),
- $services->getPermissionManager()
+ $services->getPermissionManager(),
+ LoggerFactory::getInstance( 'BlockManager' )
);
},
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()
);
'LocalServerObjectCache' => function ( MediaWikiServices $services ) : BagOStuff {
$config = $services->getMainConfig();
- $cacheId = \ObjectCache::detectLocalServerCache();
+ $cacheId = ObjectCache::detectLocalServerCache();
- return \ObjectCache::newFromParams( $config->get( 'ObjectCaches' )[$cacheId] );
+ return ObjectCache::newFromParams( $config->get( 'ObjectCaches' )[$cacheId] );
},
'LockManagerGroupFactory' => function ( MediaWikiServices $services ) : LockManagerGroupFactory {
"Cache type \"$id\" is not present in \$wgObjectCaches." );
}
- return \ObjectCache::newFromParams( $mainConfig->get( 'ObjectCaches' )[$id] );
+ return ObjectCache::newFromParams( $mainConfig->get( 'ObjectCaches' )[$id] );
},
'MainWANObjectCache' => function ( MediaWikiServices $services ) : WANObjectCache {
}
$params['store'] = $mainConfig->get( 'ObjectCaches' )[$objectCacheId];
- return \ObjectCache::newWANCacheFromParams( $params );
+ return ObjectCache::newWANCacheFromParams( $params );
},
'MediaHandlerFactory' => function ( MediaWikiServices $services ) : MediaHandlerFactory {
);
},
+ 'MessageFormatterFactory' =>
+ function ( MediaWikiServices $services ) : IMessageFormatterFactory {
+ // @phan-suppress-next-line PhanAccessMethodInternal
+ return new MessageFormatterFactory();
+ },
+
'MimeAnalyzer' => function ( MediaWikiServices $services ) : MimeAnalyzer {
$logger = LoggerFactory::getInstance( 'Mime' );
$mainConfig = $services->getMainConfig();
// 'class' and 'preprocessorClass'
$services->getMainConfig()->get( 'ParserConf' ),
// Make sure to have defaults in case someone overrode ParserConf with something silly
- [ 'class' => Parser::class,
- 'preprocessorClass' => Parser::getDefaultPreprocessorClass() ],
+ [ 'class' => Parser::class, 'preprocessorClass' => Preprocessor_Hash::class ],
// Plus a buch of actual config options
$services->getMainConfig()
);
$services->getContentLanguage(),
AuthManager::singleton(),
$services->getLinkRendererFactory()->create(),
- $services->getNamespaceInfo()
+ $services->getNamespaceInfo(),
+ $services->getPermissionManager()
);
$factory->setLogger( LoggerFactory::getInstance( 'preferences' ) );
$services->getCommentStore(),
$services->getActorMigration(),
$config->get( 'MultiContentRevisionSchemaMigrationStage' ),
- LoggerFactory::getProvider(),
+ LoggerFactory::getInstance( 'RevisionStore' ),
$config->get( 'ContentHandlerUseDB' )
);
return new SpecialPageFactory(
new ServiceOptions(
SpecialPageFactory::$constructorOptions, $services->getMainConfig() ),
- $services->getContentLanguage()
+ $services->getContentLanguage(),
+ $services->getObjectFactory()
);
},
$services->getDBLoadBalancer(),
$services->getCommentStore(),
$services->getActorMigration(),
- $services->getWatchedItemStore()
+ $services->getWatchedItemStore(),
+ $services->getPermissionManager()
);
},
},
'_SqlBlobStore' => function ( MediaWikiServices $services ) : SqlBlobStore {
+ // @phan-suppress-next-line PhanAccessMethodInternal
return $services->getBlobStoreFactory()->newSqlBlobStore();
},