MediaWikiServices is the central dependency injection (DI) container for MediaWiki core, introduced in MediaWiki 1.27. It extends Wikimedia\Services\ServiceContainer and provides typed accessor methods for every registered service. Default service implementations are wired in includes/ServiceWiring.php.
Objects that need a service should receive it via constructor injection, not by calling
MediaWikiServices::getInstance() directly inside a method. Use getInstance() only in static entry points (hooks registered via $wgHooks, maintenance scripts, etc.) where constructor injection is not possible.Accessing the container
Constructor injection (recommended)
Services should declare their dependencies as constructor parameters so that the DI container can provide them automatically.ServiceWiring.php, wire the service by pulling its dependencies from the container:
Service categories
Page services
Page services
| Accessor | Return type | Since |
|---|---|---|
getPageStore() | PageStore | 1.36 |
getPageStoreFactory() | PageStoreFactory | 1.36 |
getRevisionStore() | RevisionStore | 1.31 |
getRevisionLookup() | RevisionLookup | 1.31 |
getRevisionFactory() | RevisionFactory | 1.31 |
getRevisionRenderer() | RevisionRenderer | 1.32 |
getRevisionStoreFactory() | RevisionStoreFactory | 1.32 |
getArchivedRevisionLookup() | ArchivedRevisionLookup | 1.38 |
getWikiPageFactory() | WikiPageFactory | 1.36 |
getPageUpdaterFactory() | PageUpdaterFactory | 1.37 |
getPageProps() | PageProps | 1.36 |
getRedirectLookup() | RedirectLookup | 1.38 |
getRedirectStore() | RedirectStore | 1.38 |
getDeletePageFactory() | DeletePageFactory | 1.37 |
getMovePageFactory() | MovePageFactory | 1.34 |
getMergeHistoryFactory() | MergeHistoryFactory | 1.35 |
getRollbackPageFactory() | RollbackPageFactory | 1.37 |
getUndeletePageFactory() | UndeletePageFactory | 1.38 |
getParserOutputAccess() | ParserOutputAccess | 1.36 |
User services
User services
| Accessor | Return type | Since |
|---|---|---|
getUserFactory() | UserFactory | 1.35 |
getUserGroupManager() | UserGroupManager | 1.35 |
getUserGroupManagerFactory() | UserGroupManagerFactory | 1.35 |
getUserOptionsLookup() | UserOptionsLookup | 1.35 |
getUserOptionsManager() | UserOptionsManager | 1.35 |
getUserIdentityLookup() | UserIdentityLookup | 1.36 |
getUserIdentityUtils() | UserIdentityUtils | 1.41 |
getUserNameUtils() | UserNameUtils | 1.35 |
getUserNamePrefixSearch() | UserNamePrefixSearch | 1.36 |
getUserEditTracker() | UserEditTracker | 1.35 |
getUserRegistrationLookup() | UserRegistrationLookup | 1.41 |
getActorStore() | ActorStore | 1.36 |
getActorStoreFactory() | ActorStoreFactory | 1.36 |
getCentralIdLookup() | CentralIdLookup | 1.37 |
getCentralIdLookupFactory() | CentralIdLookupFactory | 1.37 |
getTempUserCreator() | TempUserCreator | 1.39 |
getTempUserConfig() | RealTempUserConfig | 1.39 |
Database services
Database services
| Accessor | Return type | Since | Notes |
|---|---|---|---|
getConnectionProvider() | IConnectionProvider | 1.42 | Preferred over getDBLoadBalancer() |
getDBLoadBalancer() | ILoadBalancer | 1.28 | Main DB load balancer |
getDBLoadBalancerFactory() | LBFactory | 1.28 | Use getConnectionProvider() where possible |
getDatabaseFactory() | DatabaseFactory | 1.39 | |
getBlobStore() | BlobStore | 1.31 | |
getBlobStoreFactory() | BlobStoreFactory | 1.31 |
IConnectionProvider:Content and parsing services
Content and parsing services
| Accessor | Return type | Since |
|---|---|---|
getContentHandlerFactory() | IContentHandlerFactory | 1.35 |
getContentRenderer() | ContentRenderer | 1.38 |
getContentTransformer() | ContentTransformer | 1.37 |
getParserFactory() | ParserFactory | 1.32 |
getParser() | Parser | 1.29 |
getParserCache() | ParserCache | 1.30 |
getParserCacheFactory() | ParserCacheFactory | 1.36 |
getMagicWordFactory() | MagicWordFactory | 1.32 |
getParsoidParserFactory() | ParsoidParserFactory | 1.41 |
Do not call
getParser() from within services or service wiring. Use getParserFactory()->create() to obtain a fresh Parser instance instead.Auth and permissions services
Auth and permissions services
| Accessor | Return type | Since |
|---|---|---|
getAuthManager() | AuthManager | 1.35 |
getBlockManager() | BlockManager | 1.34 |
getPermissionManager() | PermissionManager | 1.33 |
getGroupPermissionsLookup() | GroupPermissionsLookup | 1.36 |
getRestrictionStore() | RestrictionStore | 1.37 |
getRateLimiter() | RateLimiter | 1.39 |
getBlockUserFactory() | BlockUserFactory | 1.36 |
getUnblockUserFactory() | UnblockUserFactory | 1.36 |
getDatabaseBlockStore() | DatabaseBlockStore | 1.36 |
getPasswordFactory() | PasswordFactory | 1.32 |
getPasswordReset() | PasswordReset | 1.34 |
Caching services
Caching services
| Accessor | Return type | Since | Notes |
|---|---|---|---|
getMainWANObjectCache() | WANObjectCache | 1.28 | Cross-datacenter WAN cache |
getLocalServerObjectCache() | BagOStuff | 1.28 | Per-server cache |
getMainObjectStash() | BagOStuff | 1.28 | Global stash |
getObjectCacheFactory() | ObjectCacheFactory | 1.42 | |
getLinkCache() | LinkCache | 1.28 | |
getParserCache() | ParserCache | 1.30 | |
getLocalisationCache() | LocalisationCache | 1.34 | |
getMessageCache() | MessageCache | 1.34 |
Search services
Search services
| Accessor | Return type | Since |
|---|---|---|
getSearchEngineFactory() | SearchEngineFactory | 1.27 |
getSearchEngineConfig() | SearchEngineConfig | 1.27 |
newSearchEngine() | SearchEngine | 1.27 |
getTitleMatcher() | TitleMatcher | 1.40 |
newSearchEngine() returns a new instance on every call because search engine objects maintain internal state.HTTP services
HTTP services
| Accessor | Return type | Since |
|---|---|---|
getHttpRequestFactory() | HttpRequestFactory | 1.31 |
getUrlUtils() | UrlUtils | 1.39 |
getProxyLookup() | ProxyLookup | 1.28 |
Other core services
Other core services
| Accessor | Return type | Since |
|---|---|---|
getHookContainer() | HookContainer | 1.35 |
getTitleFormatter() | TitleFormatter | 1.28 |
getTitleParser() | TitleParser | 1.28 |
getTitleFactory() | TitleFactory | 1.35 |
getLinkRenderer() | LinkRenderer | 1.28 |
getLinkRendererFactory() | LinkRendererFactory | 1.28 |
getJobQueueGroup() | JobQueueGroup | 1.37 |
getJobQueueGroupFactory() | JobQueueGroupFactory | 1.37 |
getJobFactory() | JobFactory | 1.40 |
getJobRunner() | JobRunner | 1.35 |
getLanguageFactory() | LanguageFactory | 1.35 |
getLanguageConverterFactory() | LanguageConverterFactory | 1.35 |
getLanguageNameUtils() | LanguageNameUtils | 1.34 |
getNamespaceInfo() | NamespaceInfo | 1.34 |
getConfigFactory() | ConfigFactory | 1.27 |
getMainConfig() | Config | 1.27 |
getObjectFactory() | ObjectFactory | 1.34 |
getSpecialPageFactory() | SpecialPageFactory | 1.32 |
getResourceLoader() | ResourceLoader | 1.33 |
getSkinFactory() | SkinFactory | 1.27 |
getInterwikiLookup() | InterwikiLookup | 1.28 |
getWatchedItemStore() | WatchedItemStoreInterface | 1.28 |
getWatchlistManager() | WatchlistManager | 1.36 |
getCommentStore() | CommentStore | 1.31 |
getCommentFormatter() | CommentFormatter | 1.38 |
getGlobalIdGenerator() | GlobalIdGenerator | 1.35 |
getStatsFactory() | StatsFactory | 1.41 |
Service reset in tests
MediaWikiIntegrationTestCase resets the global container between test cases automatically. To override a specific service within a test, useoverrideConfigValue() or setService():
Resetting the global instance
resetGlobalInstance() creates a fresh container, optionally re-importing service wiring from the previous instance. The $mode parameter controls how expensive resources are handled:
