Pourquoi utiliser le gestionnaire de services dans Zend Framework 2?

permet de dire que j'ai un service:

namespace Helloworld\Service;

class GreetingService
{
    public function getGreeting()
    {
        if(date("H") <= 11)
            return "Good morning, world!";
        else if (date("H") > 11 && date("H") < 17)
            return "Hello, world!";
        else
            return "Good evening, world!";
    }
}

et je créer un invokable pour elle

public function getServiceConfig()
{
    return array(
        'invokables' => array(
            'greetingService'
                => 'Helloworld\Service\GreetingService'
        )
    );
}

ensuite dans mon contrôleur je pouvais faire:

public function indexAction()
{
    $greetingSrv = $this->getServiceLocator()
        ->get('greetingService');

    return new ViewModel(
        array('greeting' => $greetingSrv->getGreeting())
    );
}

soi-disant ce faire, le contrôleur dépendant du service (et le ServiceManager)

et la meilleure solution est de créer une usine pour que le service ou le retour d'une fermeture dans le ServiceManager et de créer un setter dans le contrôleur:

class IndexController extends AbstractActionController
{
    private $greetingService;

    public function indexAction()
    {

        return new ViewModel(
            array(
                'greeting' => $this->greetingService->getGreeting()
            )
        );
    }

    public function setGreetingService($service)
    {
        $this->greetingService = $service;
    }
}

et

'controllers' => array(
    'factories' => array(
        'Helloworld\Controller\Index' => function($serviceLocator) {
            $ctr = new Helloworld\Controller\IndexController();

            $ctr->setGreetingService(
                $serviceLocator->getServiceLocator()
                    ->get('greetingService')
            );

            return $ctr;
        }
    )
)

Ma question est pourquoi? Pourquoi est la deuxième méthode est mieux que le premier? et que signifie le fait que le controller is dependent of the service?

grâce

source d'informationauteur Patrioticcow