如何在ZF2中的Zend \ ServiceManager中使用Zend \ Di?

I'm trying to make the Zend\ServiceManager use Zend\Di to create my instances, since I have pre-scanned and cached DI definitions already. I realize this might come with a speed penalty but on the other hand, I need to write a lot less meta-code.

The ServiceManager documentation says that

the ServiceManager also provides optional ties to Zend\Di, allowing Di to act as an initializer or an abstract factory for the manager.

But I don't find any examples of how make the ServiceManager use Zend\Di. I'm not even sure where I should set this up, maybe in Module::getServiceConfig()? Can anyone provide some example code?

The following works for me. In order to make Zend\Di compatible with Zend\ServiceManager, I extended a class MyLib\Di\Di from Zend\Di\Di which implements the AbstractFactoryInterface.

namespace MyLib\Di;
use Zend\ServiceManager\AbstractFactoryInterface; 
use Zend\ServiceManager\ServiceLocatorInterface;

class Di extends \Zend\Di\Di implements AbstractFactoryInterface
{
    public function canCreateServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName)
    {
        return true;
    }

    public function createServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName)
    {
        return $this->get($requestedName);
    }
}

Now, I can use MyLib\Di\Di as a fallback abstract factory for Zend\ServiceManager. Here's an example of how I create my IndexController. The IndexController's dependencies (constructor parameters) are injected automatically.

class Module
{
    ... 

    public function getServiceConfig()
    {        
        $this->di = new \MyLib\Di\Di;
        $this->configureDi($this->di); // Set up definitions and shared instances

        return array(
            'abstract_factories' => array($this->di),
        );
    }

    public function getControllerConfig()
    {
        return array(
            'factories' => array(
                'Survey\Controller\IndexController' => function() {
                    return $this->di->get('Survey\Controller\IndexController');
                },
            ),
        );
    }
}

One option - add to config/module.config.php

'service_manager' => array(
    'invokables' => array(
        'Application\Service\User'              => 'Application\Service\User',
    ),
  ),

then class needs to implement Zend\ServiceManager\ServiceManagerAwareInterface

When initiated, serviceManager instance is going to be injected, then you can use something like this in class:

$authService = $this->getServiceManager()->get('Zend\Authentication\AuthenticationService');

second option would be to put it into Module.php

public function getServiceConfig()