Contêiner de injeção de dependência (DiC) vs. localizador de serviço (SL)

Parece haver muita confusão entre os termos recipiente de injeção de dependência (DiC) e localizador de serviço (SL) . Parte da confusão surge, porque o mesmo serviço (por exemplo, Zend ServiceManager , Zend Di Di ou ZendDiCompiler ) pode ser usado como um DiC ou como um SL .

Usar esse serviço como um DiC significa que o serviço injeta as dependências de fora em uma classe. Em um cenário DiC puro , o DiC é usado apenas durante o bootstrap. Ele cria a classe do controlador e injeta suas dependências de fora, sem ser usado no controlador ( padrão Register Resolve Release ).

Usar o mesmo serviço que um SL significa puxar as dependências de uma classe de dentro dessa classe. Alguns especialistas desaconselham o padrão do localizador de serviço . No entanto, no Zend Framework 2, o padrão de localizador de serviço é comumente usado, pois você pode extrair serviços de dentro dos controladores com $this->serviceLocator->get().

Para exemplos de código de DiC e SL , dê uma olhada no meu módulo ZendDiCompiler ZF2!