Как использовать внедрение зависимостей с Zend_Soap_AutoDiscover - PullRequest
1 голос
/ 19 ноября 2011

Я впервые пытаюсь использовать контейнер внедрения зависимостей в проекте, но я только что обнаружил проблему, которую не знаю, как ее решить.

В проекте предусмотрен веб-сервис SOAP, который реализован поверх SOAP-компонента Zend Framework.Это работает так, что вы определяете класс, который действует как ваш сервис, вы создаете класс Zend_Soap_AutoDiscover или Zend_Soap_Server (для WSDL или самого класса, в зависимости от ситуации), и, наконец, вы передаете ZF имя класса сервиса черезконструктор или через метод setClass.Например:

class MyService {}

$autodiscoveryObj = new Zend_Soap_AutoDiscover();
$autodiscoveryObj->setClass('MyService');
...

Проблема с этим последним шагом.Мой DI-контейнер может создать сервисный объект и внедрить в него все необходимые зависимости.Это нормально, если мне нужен экземпляр в моем собственном коде.Тем не менее, b / c вы просто передаете имя класса в ZF, и вы не можете на самом деле создать его экземпляр самостоятельно, он не будет должным образом создан в контейнере, поэтому его зависимости никогда не вводятся.Кроме того, я не думаю, что смогу использовать какой-либо класс-обертку, поскольку ZF использует отражение в классе.

Какой лучший способ справиться с этим?

1 Ответ

0 голосов
/ 19 ноября 2011

В Zend_Soap_Server вы можете прикрепить / установить объект как в SoapServer

/**
 * Attach an object to a server
 *
 * Accepts an instanciated object to use when handling requests.
 *
 * @param object $object
 * @return Zend_Soap_Server
 */
public function setObject($object)
...