. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Core\Container; use Espo\Core\Container\Exceptions\NotSettableException; use Psr\Container\ContainerInterface; use Psr\Container\NotFoundExceptionInterface; use ReflectionClass; /** * DI container for services. Lazy initialization is used. Services are instantiated only once. * @see https://docs.espocrm.com/development/di/. */ interface Container extends ContainerInterface { /** * Obtain a service object. * * @throws NotFoundExceptionInterface If not gettable. */ public function get(string $id): object; /** * Check whether a service can be obtained. */ public function has(string $id): bool; /** * Set a service object. Must be configured as settable. * * @throws NotSettableException Is not settable or already set. */ public function set(string $id, object $object): void; /** * Get a class of a service. * * @return ReflectionClass * @throws NotFoundExceptionInterface If not gettable. */ public function getClass(string $id): ReflectionClass; /** * Get a service by a class name. A service should be bound to a class or interface. * * @template T of object * @param class-string $className A class name or interface name. * @return T A service instance. * @throws NotFoundExceptionInterface If not gettable. */ public function getByClass(string $className): object; }