. * * 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); * */ use Dice\Dice; use Friendica\App; use Friendica\Core\Cache; use Friendica\Core\Config; use Friendica\Core\PConfig; use Friendica\Core\L10n; use Friendica\Core\Lock; use Friendica\Core\Process; use Friendica\Core\Session\Capability\IHandleSessions; use Friendica\Core\Storage\Repository\StorageManager; use Friendica\Database\Database; use Friendica\Factory; use Friendica\Core\Storage\Capability\ICanWriteToStorage; use Friendica\Model\User\Cookie; use Friendica\Model\Log\ParsedLogIterator; use Friendica\Network; use Friendica\Util; use Psr\Log\LoggerInterface; return [ '*' => [ // marks all class result as shared for other creations, so there's just // one instance for the whole execution 'shared' => true, ], '$basepath' => [ 'instanceOf' => Util\BasePath::class, 'call' => [ ['getPath', [], Dice::CHAIN_CALL], ], 'constructParams' => [ dirname(__FILE__, 2), $_SERVER ] ], Util\BasePath::class => [ 'constructParams' => [ dirname(__FILE__, 2), $_SERVER ] ], Config\Util\ConfigFileLoader::class => [ 'instanceOf' => Config\Factory\Config::class, 'call' => [ ['createConfigFileLoader', [ [Dice::INSTANCE => '$basepath'], $_SERVER, ], Dice::CHAIN_CALL], ], ], Config\ValueObject\Cache::class => [ 'instanceOf' => Config\Factory\Config::class, 'call' => [ ['createCache', [$_SERVER], Dice::CHAIN_CALL], ], ], App\Mode::class => [ 'call' => [ ['determineRunMode', [true, $_SERVER], Dice::CHAIN_CALL], ['determine', [], Dice::CHAIN_CALL], ], ], Config\Capability\IManageConfigValues::class => [ 'instanceOf' => Config\Factory\Config::class, 'call' => [ ['create', [], Dice::CHAIN_CALL], ], ], PConfig\Capability\IManagePersonalConfigValues::class => [ 'instanceOf' => PConfig\Factory\PConfig::class, 'call' => [ ['create', [], Dice::CHAIN_CALL], ] ], Database::class => [ 'constructParams' => [ [Dice::INSTANCE => \Psr\Log\NullLogger::class], ], ], /** * Creates the App\BaseURL * * Same as: * $baseURL = new App\BaseURL($configuration, $_SERVER); */ App\BaseURL::class => [ 'constructParams' => [ $_SERVER, ], ], App\Page::class => [ 'constructParams' => [ [Dice::INSTANCE => '$basepath'], ], ], /** * 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 => [ 'instanceOf' => Factory\LoggerFactory::class, 'constructParams' => [ 'index', ], 'call' => [ ['create', ['index'], Dice::CHAIN_CALL], ], ], '$devLogger' => [ 'instanceOf' => Factory\LoggerFactory::class, 'constructParams' => [ 'dev', ], 'call' => [ ['createDev', [], Dice::CHAIN_CALL], ] ], Cache\Capability\ICanCache::class => [ 'instanceOf' => Cache\Factory\Cache::class, 'call' => [ ['create', [], Dice::CHAIN_CALL], ], ], Cache\Capability\ICanCacheInMemory::class => [ 'instanceOf' => Cache\Factory\Cache::class, 'call' => [ ['create', [], Dice::CHAIN_CALL], ], ], Lock\Capability\ICanLock::class => [ 'instanceOf' => Lock\Factory\Lock::class, 'call' => [ ['create', [], Dice::CHAIN_CALL], ], ], App\Arguments::class => [ 'instanceOf' => App\Arguments::class, 'call' => [ ['determine', [$_SERVER, $_GET], Dice::CHAIN_CALL], ], ], App\Module::class => [ 'instanceOf' => App\Module::class, 'call' => [ ['determineModule', [], Dice::CHAIN_CALL], ], ], Process::class => [ 'constructParams' => [ [Dice::INSTANCE => '$basepath'], getmypid(), ], ], App\Router::class => [ 'constructParams' => [ $_SERVER, __DIR__ . '/routes.config.php', null ], ], L10n::class => [ 'constructParams' => [ $_SERVER, $_GET ], ], IHandleSessions::class => [ 'instanceOf' => \Friendica\Core\Session\Factory\Session::class, 'call' => [ ['createSession', [$_SERVER], Dice::CHAIN_CALL], ['start', [], Dice::CHAIN_CALL], ], ], Cookie::class => [ 'constructParams' => [ $_SERVER, $_COOKIE ], ], ICanWriteToStorage::class => [ 'instanceOf' => StorageManager::class, 'call' => [ ['getBackend', [], Dice::CHAIN_CALL], ], ], Network\IHTTPClient::class => [ 'instanceOf' => Factory\HTTPClientFactory::class, 'call' => [ ['createClient', [], Dice::CHAIN_CALL], ], ], Factory\Api\Mastodon\Error::class => [ 'constructParams' => [ $_SERVER ], ], ParsedLogIterator::class => [ 'constructParams' => [ [Dice::INSTANCE => Util\ReversedFileReader::class], ] ], ];