/**
  * @param DiInterface $di
  * @param array $serviceNames
  */
 public function __construct($di, $serviceNames = ['db' => ['db'], 'dispatch' => ['dispatcher'], 'view' => ['view']])
 {
     $this->di = $di;
     $this->startTime = microtime(true);
     $this->profiler = new Profiler();
     $eventsManager = $di->get('eventsManager');
     foreach ($di->getServices() as $service) {
         $name = $service->getName();
         foreach ($serviceNames as $eventName => $services) {
             if (in_array($name, $services)) {
                 $service->setShared(true);
                 $di->get($name)->setEventsManager($eventsManager);
                 break;
             }
         }
     }
     foreach (array_keys($serviceNames) as $eventName) {
         $eventsManager->attach($eventName, $this);
     }
     $this->serviceNames = $serviceNames;
 }
 /**
  * DebugWidget constructor.
  * @param DiInterface $di
  * @param array       $serviceNames
  * @param array       $panels
  */
 public function __construct($di, $serviceNames = array('db' => array('db'), 'dispatch' => array('dispatcher'), 'view' => array('view')), $panels = array('server', 'request', 'views', 'db'))
 {
     $this->_di = $di;
     $this->startTime = microtime(true);
     $this->_profiler = new Profiler();
     $eventsManager = $di->get('eventsManager');
     foreach ($di->getServices() as $service) {
         /** @var Di\Service $service */
         $name = $service->getName();
         foreach ($serviceNames as $eventName => $services) {
             if (in_array($name, $services)) {
                 $service->setShared(true);
                 $di->get($name)->setEventsManager($eventsManager);
                 break;
             }
         }
     }
     foreach (array_keys($serviceNames) as $eventName) {
         $eventsManager->attach($eventName, $this);
     }
     $this->_serviceNames = $serviceNames;
     $this->_panels = $panels;
 }