Introduce DICE
- Adding dice library - Adding dependency config - Removing Factories - Refactoring App\Mode constructor - Refactoring App\Router constructor - Refactoring BasePath for DI usage - Refactoring ConfigFileLoader constructor - Refactoring Profiler constructor - Adjust entrypoints (index, console, worker, ..) - Adding functional test for DI - Fix tests because of refactorings
This commit is contained in:
parent
5887b9c499
commit
55999730e0
28 changed files with 563 additions and 308 deletions
125
static/dependencies.config.php
Normal file
125
static/dependencies.config.php
Normal file
|
@ -0,0 +1,125 @@
|
|||
<?php
|
||||
|
||||
use Dice\Dice;
|
||||
use Friendica\App;
|
||||
use Friendica\Core\Config;
|
||||
use Friendica\Database\Database;
|
||||
use Friendica\Factory;
|
||||
use Friendica\Util;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
/**
|
||||
* The configuration defines "complex" dependencies inside Friendica
|
||||
* So this classes shouldn't be simple or their dependencies are already defined here.
|
||||
*
|
||||
* This kind of dependencies are NOT required to be defined here:
|
||||
* - $a = new ClassA(new ClassB());
|
||||
* - $a = new ClassA();
|
||||
* - $a = new ClassA(Configuration $configuration);
|
||||
*
|
||||
* This kind of dependencies SHOULD be defined here:
|
||||
* - $a = new ClassA();
|
||||
* $b = $a->create();
|
||||
*
|
||||
* - $a = new ClassA($creationPassedVariable);
|
||||
*
|
||||
*/
|
||||
return [
|
||||
'$basepath' => [
|
||||
'instanceOf' => Util\BasePath::class,
|
||||
'call' => [
|
||||
['getPath', [], Dice::CHAIN_CALL],
|
||||
],
|
||||
'constructParams' => [
|
||||
dirname(__FILE__, 2),
|
||||
$_SERVER
|
||||
]
|
||||
],
|
||||
Util\BasePath::class => [
|
||||
'shared' => true,
|
||||
'constructParams' => [
|
||||
dirname(__FILE__, 2),
|
||||
$_SERVER
|
||||
]
|
||||
],
|
||||
Util\ConfigFileLoader::class => [
|
||||
'shared' => true,
|
||||
'constructParams' => [
|
||||
[Dice::INSTANCE => '$basepath'],
|
||||
],
|
||||
],
|
||||
Config\Cache\ConfigCache::class => [
|
||||
'instanceOf' => Factory\ConfigFactory::class,
|
||||
'call' => [
|
||||
['createCache', [], Dice::CHAIN_CALL],
|
||||
],
|
||||
'shared' => true,
|
||||
],
|
||||
App\Mode::class => [
|
||||
'call' => [
|
||||
['determine', [], Dice::CHAIN_CALL],
|
||||
],
|
||||
// marks the result as shared for other creations, so there's just
|
||||
// one instance for the whole execution
|
||||
'shared' => true,
|
||||
],
|
||||
Config\Configuration::class => [
|
||||
'shared' => true,
|
||||
'instanceOf' => Factory\ConfigFactory::class,
|
||||
'call' => [
|
||||
['createConfig', [], Dice::CHAIN_CALL],
|
||||
],
|
||||
],
|
||||
Config\PConfiguration::class => [
|
||||
'shared' => true,
|
||||
'instanceOf' => Factory\ConfigFactory::class,
|
||||
'call' => [
|
||||
['createPConfig', [], Dice::CHAIN_CALL],
|
||||
]
|
||||
],
|
||||
Database::class => [
|
||||
'shared' => true,
|
||||
'constructParams' => [
|
||||
[DICE::INSTANCE => \Psr\Log\NullLogger::class],
|
||||
$_SERVER,
|
||||
],
|
||||
],
|
||||
/**
|
||||
* Creates the Util\BaseURL
|
||||
*
|
||||
* Same as:
|
||||
* $baseURL = new Util\BaseURL($configuration, $_SERVER);
|
||||
*/
|
||||
Util\BaseURL::class => [
|
||||
'shared' => true,
|
||||
'constructParams' => [
|
||||
$_SERVER,
|
||||
],
|
||||
],
|
||||
/**
|
||||
* Create a Logger, which implements the LoggerInterface
|
||||
*
|
||||
* Same as:
|
||||
* $loggerFactory = new Factory\LoggerFactory();
|
||||
* $logger = $loggerFactory->create($channel, $configuration, $profiler);
|
||||
*
|
||||
* Attention1: We can use DICE for detecting dependencies inside "chained" calls too
|
||||
* Attention2: The variable "$channel" is passed inside the creation of the dependencies per:
|
||||
* $app = $dice->create(App::class, [], ['$channel' => 'index']);
|
||||
* and is automatically passed as an argument with the same name
|
||||
*/
|
||||
LoggerInterface::class => [
|
||||
'shared' => true,
|
||||
'instanceOf' => Factory\LoggerFactory::class,
|
||||
'call' => [
|
||||
['create', [], Dice::CHAIN_CALL],
|
||||
],
|
||||
],
|
||||
'$devLogger' => [
|
||||
'shared' => true,
|
||||
'instanceOf' => Factory\LoggerFactory::class,
|
||||
'call' => [
|
||||
['createDev', [], Dice::CHAIN_CALL],
|
||||
]
|
||||
]
|
||||
];
|
Loading…
Add table
Add a link
Reference in a new issue