/**
* @param ContainerInterface $container
* @return EventStore
*/
public function __invoke(ContainerInterface $container)
{
$config = $container->get('config');
if (!isset($config['prooph'])) {
throw ConfigurationException::configurationError('Missing prooph config key in application config');
}
if (!isset($config['prooph']['event_store'])) {
throw ConfigurationException::configurationError('Missing key event_store in prooph configuration');
}
$config = $config['prooph']['event_store'];
if (!isset($config['adapter']['type'])) {
throw ConfigurationException::configurationError(sprintf('Event store adapter is missing in configuration'));
}
$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);
$plugins = isset($config['plugins']) ? $config['plugins'] : [];
foreach ($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);
}
return $eventStore;
}