---
title: "Breaking: #92238 - Service injection in Extbase validators"
manual: "TYPO3 Core Changelog"
version: "main"
permalink: "https://docs.typo3.org/permalink/changelog:breaking-92238"
source: "Changelog/11.0/Breaking-92238-ServiceInjectionInExtbaseValidators.rst"
typo3-version: "11.0"
typo3-major: 11
type: "breaking"
issue: 92238
forge: "https://forge.typo3.org/issues/92238"
tags: ["PHP-API", "NotScanned", "ext:extbase"]
rendered: "2026-09-23T19:53:57+00:00"
---

# Breaking: #92238 - Service injection in Extbase validators {#breaking-92238}

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

## Description {#description}

With the deprecation and removal of objectManager usage in TYPO3, Extbase does not
use the objectManager to create validator instances any more.

> [!NOTE]
> This has been mitigated with recent TYPO3 v11 core releases: Extbase validators
> can use dependency injection again. See [this changelog](https://docs.typo3.org/permalink/changelog:important-96332)
> for details.
> Additionally, all validators delivered by EXT:extbase and EXT:form will be marked
> `final` in v12. Extensions can no longer extend validators but must extend abstract
> classes or implement the interfaces directly.

## Impact {#impact}

Validators that use dependency injection will experience non injected services for affected properties.

## Affected Installations {#affected-installations}

All installations that use dependency injection in Extbase validators.

## Migration {#migration}

Instead of injecting services to the validator, use `GeneralUtility::makeInstance`
to create an instance of required services.

Given the following example for a service injection in a validator:

```php
/**
 * @var ConfigurationManagerInterface
 */
protected $configurationManager;

/**
 * @param ConfigurationManagerInterface $configurationManager
 */
public function injectConfigurationManager(ConfigurationManagerInterface $configurationManager)
{
    $this->configurationManager = $configurationManager;
}
```

Since the configurationManager is required globally in the class, `GeneralUtility::makeInstance`
is used in the constructor of the validator to create an instance of the service.

```php
/**
 * @var ConfigurationManagerInterface
 */
protected $configurationManager;

public function __construct(array $options = [])
{
    $this->configurationManager = GeneralUtility::makeInstance(ConfigurationManagerInterface::class);
    parent::__construct($options);
}
```

In order to create instances of services that require dependency injection and which
are not already instantiated in the service container, it is required to declare those
services as `public: true` in the `Configuration/Services.yaml` of the given extension.

```yaml
Vendor\MyExtension\Services\MyService:
  public: true
```
