Содержание


ServiceManager


ServiceManager, ЗФ2, Zend Framework 2, ZF2,




ServiceManager реализует паттерн Service Locator.  Сервис/объект  Service Locator отвечает за получение других объектов. Взаимодействие с  ServiceManager происходит через следующие методы:  

// /library/Zend/ServiceManager/ServiceLocatorInterface.php
      namespace Zend\ServiceManager;
 
      interface ServiceLocatorInterface
      {
              public function get($name);
              public function has($name);
      }

has($name) – прверяет, есть ли в ServiceManager сервис с указным именем.

get($name) – полчает сервис по указанному имени.

 

В дополнение к указанным методам, ServiceManger может быть создан с помощью следующих функций:

 

1) Служба регистрации. Вы можете зарегистрировать объект под именем $services->setService('foo', $object).

2) Ленивая загрузка объектов. Вы можете указать, какой класс использоваться для создания экземпляра при первом вызове: $services->setInvokableClass('foo', 'FullyQualifiedClassname').

3) Фабрика сервисов. Вместо указания реального экземпляра класса или имени класса есть возможность вызвать соответствующую фабрику, которая создаст нужный экземпляр объекта. Фабрикой может быть любая возвращаемая безымянная функция, реализующая интерфейс Zend\ServiceManager\FactoryInterface или имя класса, реализующего этот интерфейс.

4) Псевдонимы (alias). При обращении к имени на самом деле вызывается что то другое. Вы можете создать псевдоним для известного сервиса, сервиса ленивой загрузки, фабрики и т.д.

5) Абстрактные фабрики. Абстрактная фабрика может рассматриваться как «резервная» - если сервис не существует в менеджере, то будет передаваться абстрактные фабрики, пока хоть одна из них не сможет вернуть объект.

6) Инициализаторы. Вы можете определять точечную инъекцию, которая будет выполняться всегда и сама -  например, любой объект, загруженный через менеджер сервисов (service manager) и реализующий интерфейс Zend\EventManager\EventManagerAware так же получают экземпляр EventManager. Инициализаторы – замыкания PHP или класс, реализующий Zend\ServiceManager\InitializerInterface. Они получают новый экземпляр и в дальнейшем могут управлять им.

 

К дополнению к вышесказанному, можно добавить, что ServiceManager обеспечивает связи с Zend\Di, позволяя тем самым выступать DI  в роли инициализатора или абстрактной фабрики.