You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
2.2 KiB
PHP
106 lines
2.2 KiB
PHP
<?php
|
|
/**
|
|
* Class Services.
|
|
*/
|
|
|
|
declare(strict_types = 1);
|
|
|
|
namespace Google\Web_Stories;
|
|
|
|
use Google\Web_Stories\Infrastructure\Injector;
|
|
use Google\Web_Stories\Infrastructure\Service;
|
|
use Google\Web_Stories\Infrastructure\ServiceContainer;
|
|
|
|
/**
|
|
* Convenience class to get easy access to the service container.
|
|
*
|
|
* Using this should always be the last resort.
|
|
* Always prefer to use constructor injection instead.
|
|
*/
|
|
final class Services {
|
|
|
|
/**
|
|
* Plugin object instance.
|
|
*/
|
|
private static ?Plugin $plugin = null;
|
|
|
|
/**
|
|
* Service container object instance.
|
|
*
|
|
* @var ServiceContainer<Service>
|
|
*/
|
|
private static ?ServiceContainer $container = null;
|
|
|
|
/**
|
|
* Dependency injector object instance.
|
|
*/
|
|
private static ?Injector $injector = null;
|
|
|
|
/**
|
|
* Get a particular service out of the service container.
|
|
*
|
|
* @since 1.6.0
|
|
*
|
|
* @param string $service Service ID to retrieve.
|
|
*/
|
|
public static function get( string $service ): Service {
|
|
return self::get_container()->get( $service );
|
|
}
|
|
|
|
/**
|
|
* Check if a particular service has been registered in the service container.
|
|
*
|
|
* @since 1.6.0
|
|
*
|
|
* @param string $service Service ID to retrieve.
|
|
*/
|
|
public static function has( string $service ): bool {
|
|
return self::get_container()->has( $service );
|
|
}
|
|
|
|
/**
|
|
* Get an instance of the plugin.
|
|
*
|
|
* @since 1.6.0
|
|
*
|
|
* @return Plugin Plugin object instance.
|
|
*/
|
|
public static function get_plugin(): Plugin {
|
|
if ( null === self::$plugin ) {
|
|
self::$plugin = PluginFactory::create();
|
|
}
|
|
|
|
return self::$plugin;
|
|
}
|
|
|
|
/**
|
|
* Get an instance of the service container.
|
|
*
|
|
* @since 1.6.0
|
|
*
|
|
* @return ServiceContainer<Service> Service container object instance.
|
|
*/
|
|
public static function get_container(): ServiceContainer {
|
|
if ( null === self::$container ) {
|
|
self::$container = self::get_plugin()->get_container();
|
|
}
|
|
|
|
return self::$container;
|
|
}
|
|
|
|
/**
|
|
* Get an instance of the dependency injector.
|
|
*
|
|
* @since 1.6.0
|
|
*
|
|
* @return Injector Dependency injector object instance.
|
|
*/
|
|
public static function get_injector(): Injector {
|
|
if ( null === self::$injector ) {
|
|
self::$injector = self::get_container()->get( 'injector' );
|
|
}
|
|
|
|
return self::$injector;
|
|
}
|
|
}
|