From 921845c3bd10fa0207cdfcab48cf0ebc928a2825 Mon Sep 17 00:00:00 2001 From: nupplaPhil Date: Sat, 18 Jan 2020 11:28:29 +0100 Subject: [PATCH] Refactor DI annotations to static methods --- src/DI.php | 383 ++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 307 insertions(+), 76 deletions(-) diff --git a/src/DI.php b/src/DI.php index b7be36212b..38d000423f 100644 --- a/src/DI.php +++ b/src/DI.php @@ -8,83 +8,10 @@ use Psr\Log\LoggerInterface; /** * This class is capable of getting all dynamic created classes * - * There has to be a "method" phpDoc for each new class, containing result class for a proper matching - * - * @method static App app() - * @method static App\Authentication auth() - * @method static App\Arguments args() - * @method static App\BaseURL baseUrl() - * @method static App\Mode mode() - * @method static App\Module module() - * @method static App\Page page() - * @method static App\Router router() - * @method static Content\Item contentItem() - * @method static Content\Text\BBCode\Video bbCodeVideo() - * @method static Core\Cache\ICache cache() - * @method static Core\Config\IConfiguration config() - * @method static Core\Config\IPConfiguration pConfig() - * @method static Core\Lock\ILock lock() - * @method static Core\L10n\L10n l10n() - * @method static Core\Process process() - * @method static Core\Session\ISession session() - * @method static Core\StorageManager storageManager() - * @method static Database\Database dba() - * @method static Factory\Mastodon\Account mstdnAccount() - * @method static Factory\Mastodon\FollowRequest mstdnFollowRequest() - * @method static Factory\Mastodon\Relationship mstdnRelationship() - * @method static Model\User\Cookie cookie() - * @method static Model\Notify notify() - * @method static Repository\Introduction intro() - * @method static Model\Storage\IStorage storage() - * @method static Protocol\Activity activity() - * @method static Util\ACLFormatter aclFormatter() - * @method static Util\DateTimeFormat dtFormat() - * @method static Util\FileSystem fs() - * @method static Util\Profiler profiler() - * @method static LoggerInterface logger() - * @method static LoggerInterface devLogger() - * @method static LoggerInterface workerLogger() - * + * @see https://designpatternsphp.readthedocs.io/en/latest/Structural/Registry/README.html */ abstract class DI { - const CLASS_MAPPING = [ - 'app' => App::class, - 'auth' => App\Authentication::class, - 'args' => App\Arguments::class, - 'baseUrl' => App\BaseURL::class, - 'mode' => App\Mode::class, - 'module' => App\Module::class, - 'page' => App\Page::class, - 'router' => App\Router::class, - 'contentItem' => Content\Item::class, - 'bbCodeVideo' => Content\Text\BBCode\Video::class, - 'cache' => Core\Cache\ICache::class, - 'config' => Core\Config\IConfiguration::class, - 'pConfig' => Core\Config\IPConfiguration::class, - 'l10n' => Core\L10n\L10n::class, - 'lock' => Core\Lock\ILock::class, - 'process' => Core\Process::class, - 'session' => Core\Session\ISession::class, - 'storageManager' => Core\StorageManager::class, - 'dba' => Database\Database::class, - 'mstdnAccount' => Factory\Mastodon\Account::class, - 'mstdnFollowRequest' => Factory\Mastodon\FollowRequest::class, - 'mstdnRelationship' => Factory\Mastodon\Relationship::class, - 'cookie' => Model\User\Cookie::class, - 'notify' => Model\Notify::class, - 'storage' => Model\Storage\IStorage::class, - 'intro' => Repository\Introduction::class, - 'activity' => Protocol\Activity::class, - 'aclFormatter' => Util\ACLFormatter::class, - 'dtFormat' => Util\DateTimeFormat::class, - 'fs' => Util\FileSystem::class, - 'workerLogger' => Util\Logger\WorkerLogger::class, - 'profiler' => Util\Profiler::class, - 'logger' => LoggerInterface::class, - 'devLogger' => '$devLogger', - ]; - /** @var Dice */ private static $dice; @@ -93,8 +20,312 @@ abstract class DI self::$dice = $dice; } - public static function __callStatic($name, $arguments) + // + // common instances + // + + /** + * @return App + */ + public static function app() { - return self::$dice->create(self::CLASS_MAPPING[$name], $arguments); + return self::$dice->create(App::class); + } + + /** + * @return Database\Database + */ + public static function dba() + { + return self::$dice->create(Database\Database::class); + } + + // + // "App" namespace instances + // + + /** + * @return App\Authentication + */ + public static function auth() + { + return self::$dice->create(App\Authentication::class); + } + + /** + * @return App\Arguments + */ + public static function args() + { + return self::$dice->create(App\Arguments::class); + } + + /** + * @return App\BaseURL + */ + public static function baseUrl() + { + return self::$dice->create(App\BaseURL::class); + } + + /** + * @return App\Mode + */ + public static function mode() + { + return self::$dice->create(App\Mode::class); + } + + /** + * @return App\Module + */ + public static function module() + { + return self::$dice->create(App\Module::class); + } + + /** + * @return App\Page + */ + public static function page() + { + return self::$dice->create(App\Page::class); + } + + /** + * @return App\Router + */ + public static function router() + { + return self::$dice->create(App\Router::class); + } + + // + // "Content" namespace instances + // + + /** + * @return Content\Item + */ + public static function contentItem() + { + return self::$dice->create(Content\Item::class); + } + + /** + * @return Content\Text\BBCode\Video + */ + public static function bbCodeVideo() + { + return self::$dice->create(Content\Text\BBCode\Video::class); + } + + // + // "Core" namespace instances + // + + /** + * @return Core\Cache\ICache + */ + public static function cache() + { + return self::$dice->create(Core\Cache\ICache::class); + } + + /** + * @return Core\Config\IConfiguration + */ + public static function config() + { + return self::$dice->create(Core\Config\IConfiguration::class); + } + + /** + * @return Core\Config\IPConfiguration + */ + public static function pConfig() + { + return self::$dice->create(Core\Config\IPConfiguration::class); + } + + /** + * @return Core\Lock\ILock + */ + public static function lock() + { + return self::$dice->create(Core\Lock\ILock::class); + } + + public static function l10n() + { + return self::$dice->create(Core\L10n\L10n::class); + } + + /** + * @return Core\Process + */ + public static function process() + { + return self::$dice->create(Core\Process::class); + } + + /** + * @return Core\Session\ISession + */ + public static function session() + { + return self::$dice->create(Core\Session\ISession::class); + } + + /** + * @return Core\StorageManager + */ + public static function storageManager() + { + return self::$dice->create(Core\StorageManager::class); + } + + // + // "LoggerInterface" instances + // + + /** + * @return LoggerInterface + */ + public static function logger() + { + return self::$dice->create(LoggerInterface::class); + } + + /** + * @return LoggerInterface + */ + public static function devLogger() + { + return self::$dice->create('$devLogger'); + } + + /** + * @return LoggerInterface + */ + public static function workerLogger() + { + return self::$dice->create(Util\Logger\WorkerLogger::class); + } + + // + // "Factory" namespace instances + // + + /** + * @return Factory\Mastodon\Account + */ + public static function mstdnAccount() + { + return self::$dice->create(Factory\Mastodon\Account::class); + } + + /** + * @return Factory\Mastodon\FollowRequest + */ + public static function mstdnFollowRequest() + { + return self::$dice->create(Factory\Mastodon\FollowRequest::class); + } + + /** + * @return Factory\Mastodon\Relationship + */ + public static function mstdnRelationship() + { + return self::$dice->create(Factory\Mastodon\Relationship::class); + } + + // + // "Model" namespace instances + // + + /** + * @return Model\User\Cookie + */ + public static function cookie() + { + return self::$dice->create(Model\User\Cookie::class); + } + + /** + * @return Model\Notify + */ + public static function notify() + { + return self::$dice->create(Model\Notify::class); + } + + /** + * @return Model\Storage\IStorage + */ + public static function storage() + { + return self::$dice->create(Model\Storage\IStorage::class); + } + + // + // "Repository" namespace + // + + /** + * @return Repository\Introduction + */ + public static function intro() + { + return self::$dice->create(Repository\Introduction::class); + } + + // + // "Protocol" namespace instances + // + + /** + * @return Protocol\Activity + */ + public static function activity() + { + return self::$dice->create(Protocol\Activity::class); + } + + // + // "Util" namespace instances + // + + /** + * @return Util\ACLFormatter + */ + public static function aclFormatter() + { + return self::$dice->create(Util\ACLFormatter::class); + } + + /** + * @return Util\DateTimeFormat + */ + public static function dtFormat() + { + return self::$dice->create(Util\DateTimeFormat::class); + } + + /** + * @return Util\FileSystem + */ + public static function fs() + { + return self::$dice->create(Util\FileSystem::class); + } + + /** + * @return Util\Profiler + */ + public static function profiler() + { + return self::$dice->create(Util\Profiler::class); } }