我正在写一个新的ZF2应用程序.我注意到ZF3已经弃用了"从任何地方"调用服务的ServiceLocator使用模式.我想为ZF3编写代码.
我能够设置我的Controller在构造函数时调用所有依赖项.但这意味着Doctrine在我需要它之前加载ie 对象.
题
如何设置它以便仅在我需要它时立即加载?(延迟加载).我知道ZF3将加载移动到Controller构造,这使得如何加载Just-In-Time的东西并不明显.
旧代码
class CommissionRepository
{
    protected $em;
    function getRepository()
    {
        //Initialize Doctrine ONLY when getRepository is called
        //it is not always called, and Doctrine is not always set up
        if (! $this->em)
            $this->em = $this->serviceLocator->get('doctrine');
        return $this->em;
    }
}
Run Code Online (Sandbox Code Playgroud)
重构ServiceLocator模式后的当前代码
class CommissionRepository
{
    protected $em;
    function getRepository()
    {
        return $this->em;
    }
    function setRepository($em)
    {
        $this->em = $em;
    }
    function useRepository($id)
    {
        return $this->em->find($id);
    }
}
class CommissionControllerFactory implements FactoryInterface
{
    public function createService(ServiceLocatorInterface $serviceLocator) …Run Code Online (Sandbox Code Playgroud) deprecated service-locator zend-framework2 zend-framework3 zend-expressive