Skip to content
Snippets Groups Projects
Commit c020e9ba authored by Benjamin Franzke's avatar Benjamin Franzke Committed by Susanne Moog
Browse files

[TASK] Inject singletons used by EXT:install in service providers

This will allow both, dependency injection for these services (manually
wired in service providers), and usage in install/maintenance tool
(where we do not use the caching symfony container for basic tasks).

The move to DI is possible thanks to the failsafe container and the
service providers which can fed the failsafe container with service
factories. These factories are used to wire services manually.

Notes:

 * The definition in a service provider means we are required to use
   manual wiring and are forced to define the dependencies in the service
   provider when we add new depenencies to services that are being used
   by the install..
   With that approach we can assure that we do not accidentally add new
   dependencies to services which would become available in symfony DI due
   to autowiring, but would be unavailable in the install tool.

 * The install tool has operations that require a booted symfony
   container which is provided by the LateBootService. Services that
   are used in that mode do not need to be listed in service providers.
   Therefore we do only add core services to service providers if they
   are used in a context without a fully booted symfony DI container.

 * GLOBALS['LANG'] mocks in Core\Tests\Unit\DataHandling\DataHandlerTest
   have been removed as the code under test does no longer use
   $GLOBALS['LANG']->csConvObj->substr() but mb_substr. The test had been
   introduced with #68602 but the tested code was adapted in #78670.

 * We got a bit ugly constructs now, where a unit(!) test previously used

     $GLOBALS['LANG'] = new LanguageService();

   …we now have to encode the dependency structure:

     $GLOBALS['LANG'] = new LanguageService(new Locales,
         new LocalizationFactory(
             new LanguageStore,
             $cacheManagerProphecy->reveal()
         )
     );

   This isn't nice, but this change reveals that the affected unit tests
   should either be adapted, removed or be moved to a functional test.
   Such adaption are out of scope for this change.

 * loadExtLocalconfDatabaseAndExtTables() is removed from the
   EXT:install AbstractController, as it hides the implicit dependency
   to LateBootService

 * Nullable constructor arguments have been changed to be non-nullable
   whenever possible. That results in some more test adaptions, but
   reveals, where unit tests rely on implicit dependencies and offers
   better readability and less possible codepaths.

Releases: master
Resolves: #89892
Resolves: #89891
Change-Id: Ib72d6440f81b2c0d05279e8768697c3b48aecfe4
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/62575


Tested-by: default avatarTYPO3com <noreply@typo3.com>
Tested-by: default avatarAndreas Fernandez <a.fernandez@scripting-base.de>
Tested-by: default avatarSusanne Moog <look@susi.dev>
Reviewed-by: default avatarAndreas Fernandez <a.fernandez@scripting-base.de>
Reviewed-by: default avatarSusanne Moog <look@susi.dev>
parent e28c4916
Showing
with 327 additions and 94 deletions
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment