Prooph\EventStore\Container\EventStoreFactory::__invoke PHP Метод

__invoke() публичный Метод

public __invoke ( Interop\Container\ContainerInterface $container ) : EventStore
$container Interop\Container\ContainerInterface
Результат Prooph\EventStore\EventStore
    public function __invoke(ContainerInterface $container)
    {
        $config = $container->get('config');
        $config = $this->options($config);
        $adapter = $container->get($config['adapter']['type']);
        if (!isset($config['event_emitter'])) {
            $eventEmitter = new ProophActionEventEmitter();
        } else {
            $eventEmitter = $container->get($config['event_emitter']);
        }
        $eventStore = new EventStore($adapter, $eventEmitter);
        foreach ($config['plugins'] as $pluginAlias) {
            $plugin = $container->get($pluginAlias);
            if (!$plugin instanceof Plugin) {
                throw ConfigurationException::configurationError(sprintf('Plugin %s does not implement the Plugin interface', $pluginAlias));
            }
            $plugin->setUp($eventStore);
        }
        if (count($config['metadata_enrichers']) > 0) {
            $metadataEnrichers = [];
            foreach ($config['metadata_enrichers'] as $metadataEnricherAlias) {
                $metadataEnricher = $container->get($metadataEnricherAlias);
                if (!$metadataEnricher instanceof MetadataEnricher) {
                    throw ConfigurationException::configurationError(sprintf('Metadata enricher %s does not implement the MetadataEnricher interface', $metadataEnricherAlias));
                }
                $metadataEnrichers[] = $metadataEnricher;
            }
            $plugin = new MetadataEnricherPlugin(new MetadataEnricherAggregate($metadataEnrichers));
            $plugin->setUp($eventStore);
        }
        return $eventStore;
    }