---
title: "Feature: #89054 - Provide core cache frontends via dependency injection"
manual: "TYPO3 Core Changelog"
version: "main"
permalink: "https://docs.typo3.org/permalink/changelog:feature-89054"
source: "Changelog/10.1/Feature-89054-ProvideCoreCacheFrontendsViaDependencyInjection.rst"
modified: "2026-09-15T10:46:36+00:00"
---

# Feature: #89054 - Provide core cache frontends via dependency injection

See [forge#89054](https://forge.typo3.org/issues/89054)

## Description

With TYPO3 v10.0 dependency injection has been introduced. To work with
the cache, currently only the `\TYPO3\CMS\Core\Cache\CacheManager` is available as a service within
the dependency injection container. To foster the „Inversion of Control“ pattern,
the instances of `\TYPO3\CMS\Core\Cache\Frontend\FrontendInterface` should
be injected to the objects rather than using the `\TYPO3\CMS\Core\Cache\CacheManager`.

Classes should be adapted to avoid `\TYPO3\CMS\Core\Cache\CacheManager` whenever possible.

The TYPO3 core provides all core caches as dependency injection services.
The name of the service follows the scheme `cache.[CONFIGURATION NAME]`.
E.g. the core cache frontend will have the service id `cache.core`.

Third party extensions are encouraged to do the same and provide a `cache.my_cache`
service in `Configuration/Services.yaml` for cache configuration they define
in `ext_localconf.php`.

## Usage

Given a class needs the "my_cache" cache Frontend, then the code before TYPO3 v10.1
looked like the following example:

```php
class MyClass
{
    /**
     * @var TYPO3\CMS\Core\Cache\Frontend\FrontendInterface
     */
    private $cache;

    public function __construct()
    {
        $cacheManager = GeneralUtility::makeInstance(CacheManager::class);
        $this->cache = $cacheManager->getCache('my_cache');
    }
}
```

The instance of `\TYPO3\CMS\Core\Cache\Frontend\FrontendInterface` was retrieved by creating an instance
of `\TYPO3\CMS\Core\Cache\CacheManager` and then by calling the `getCache()` method.

To inject the cache directly, the class needs to be changed as follows. The instance
of `\TYPO3\CMS\Core\Cache\Frontend\FrontendInterface` will be passed as an argument to the constructor.

```php
class MyClass
{
    /**
     * @var TYPO3\CMS\Core\Cache\Frontend\FrontendInterface
     */
    private $cache;

    public function __construct(FrontendInterface $cache)
    {
        $this->cache = $cache;
    }
}
```

Since the auto-wiring feature of the dependency injection container cannot detect,
which cache configuration should be used for the `$cache` argument, the container
service configuration needs to be extended as well:

```yaml
services:
  cache.my_cache:
    class: TYPO3\CMS\Core\Cache\Frontend\FrontendInterface
    factory: ['@TYPO3\CMS\Core\Cache\CacheManager', 'getCache']
    arguments: ['my_cache']

  MyClass:
    arguments:
      $cache: '@cache.my_cache'
```
