diff --git a/core/lib/Drupal/Core/EventSubscriber/ModuleRouteSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/ModuleRouteSubscriber.php
index 49f1a12..65caac6 100644
--- a/core/lib/Drupal/Core/EventSubscriber/ModuleRouteSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/ModuleRouteSubscriber.php
@@ -36,7 +36,7 @@ public function __construct(ModuleHandlerInterface $module_handler) {
   /**
    * {@inheritdoc}
    */
-  protected function alterRoutes(RouteCollection $collection, $module) {
+  protected function alterRoutes(RouteCollection $collection) {
     foreach ($collection as $name => $route) {
       if ($route->hasRequirement('_module_dependencies')) {
         $modules = $route->getRequirement('_module_dependencies');
diff --git a/core/lib/Drupal/Core/EventSubscriber/SpecialAttributesRouteSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/SpecialAttributesRouteSubscriber.php
index c9f3e7d..8556561 100644
--- a/core/lib/Drupal/Core/EventSubscriber/SpecialAttributesRouteSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/SpecialAttributesRouteSubscriber.php
@@ -21,7 +21,7 @@ class SpecialAttributesRouteSubscriber extends RouteSubscriberBase {
   /**
    * {@inheritdoc}
    */
-  protected function alterRoutes(RouteCollection $collection, $module) {
+  protected function alterRoutes(RouteCollection $collection) {
     $special_variables = array(
       'system_path',
       '_maintenance',
@@ -57,7 +57,7 @@ protected function alterRoutes(RouteCollection $collection, $module) {
    */
   public function onAlterRoutes(RouteBuildEvent $event) {
     $collection = $event->getRouteCollection();
-    return $this->alterRoutes($collection, $event->getProvider());
+    return $this->alterRoutes($collection);
   }
 
 }
diff --git a/core/lib/Drupal/Core/Routing/MatcherDumper.php b/core/lib/Drupal/Core/Routing/MatcherDumper.php
index 889b691..5ff73f9 100644
--- a/core/lib/Drupal/Core/Routing/MatcherDumper.php
+++ b/core/lib/Drupal/Core/Routing/MatcherDumper.php
@@ -76,14 +76,10 @@ public function addRoutes(RouteCollection $routes) {
    *   An array of options.
    */
   public function dump(array $options = array()) {
-    $options += array(
-      'provider' => '',
-    );
     // If there are no new routes, just delete any previously existing of this
     // provider.
     if (empty($this->routes) || !count($this->routes)) {
       $this->connection->delete($this->tableName)
-        ->condition('provider', $options['provider'])
         ->execute();
     }
     // Convert all of the routes into database records.
@@ -104,7 +100,7 @@ public function dump(array $options = array()) {
         $names[] = $name;
         $values = array(
           'name' => $name,
-          'provider' => $options['provider'],
+          'provider' => isset($options['provider']) ? $options['provider'] : 'provider',
           'fit' => $compiled->getFit(),
           'path' => $compiled->getPath(),
           'pattern_outline' => $compiled->getPatternOutline(),
@@ -124,7 +120,6 @@ public function dump(array $options = array()) {
         // old records of this provider (which may no longer exist).
         $delete = $this->connection->delete($this->tableName);
         $or = $delete->orConditionGroup()
-          ->condition('provider', $options['provider'])
           ->condition('name', $names);
         $delete->condition($or);
         $delete->execute();
diff --git a/core/lib/Drupal/Core/Routing/RouteBuildEvent.php b/core/lib/Drupal/Core/Routing/RouteBuildEvent.php
index 502318d..c3f36ee 100644
--- a/core/lib/Drupal/Core/Routing/RouteBuildEvent.php
+++ b/core/lib/Drupal/Core/Routing/RouteBuildEvent.php
@@ -23,18 +23,13 @@ class RouteBuildEvent extends Event {
   protected $routeCollection;
 
   /**
-   * The provider of this route collection.
-   *
-   * @var string
-   */
-  protected $provider;
-
-  /**
    * Constructs a RouteBuildEvent object.
+   *
+   * @param \Symfony\Component\Routing\RouteCollection $route_collection
+   *   The route collection.
    */
-  public function __construct(RouteCollection $route_collection, $provider) {
+  public function __construct(RouteCollection $route_collection) {
     $this->routeCollection = $route_collection;
-    $this->provider = $provider;
   }
 
   /**
@@ -44,11 +39,4 @@ public function getRouteCollection() {
     return $this->routeCollection;
   }
 
-  /**
-   * Gets the provider for this route collection.
-   */
-  public function getProvider() {
-    return $this->provider;
-  }
-
 }
diff --git a/core/lib/Drupal/Core/Routing/RouteBuilder.php b/core/lib/Drupal/Core/Routing/RouteBuilder.php
index 8df9f67..436778e 100644
--- a/core/lib/Drupal/Core/Routing/RouteBuilder.php
+++ b/core/lib/Drupal/Core/Routing/RouteBuilder.php
@@ -20,16 +20,13 @@
 
 /**
  * Managing class for rebuilding the router table.
- *
- * Because this class makes use of the modules system, it cannot currently
- * be unit tested.
  */
 class RouteBuilder implements RouteBuilderInterface {
 
   /**
    * The dumper to which we should send collected routes.
    *
-   * @var \Symfony\Component\Routing\Matcher\Dumper\MatcherDumperInterface
+   * @var \Drupal\Core\Routing\MatcherDumperInterface
    */
   protected $dumper;
 
@@ -81,6 +78,8 @@ class RouteBuilder implements RouteBuilderInterface {
    *   The module handler.
    * @param \Drupal\Core\Controller\ControllerResolverInterface $controller_resolver
    *   The controller resolver.
+   * @param \Drupal\Core\KeyValueStore\StateInterface $state
+   *   The state.
    */
   public function __construct(MatcherDumperInterface $dumper, LockBackendInterface $lock, EventDispatcherInterface $dispatcher, ModuleHandlerInterface $module_handler, ControllerResolverInterface $controller_resolver, StateInterface $state = NULL) {
     $this->dumper = $dumper;
@@ -103,9 +102,8 @@ public function rebuild() {
       return FALSE;
     }
 
-    foreach ($this->getRouteDefinitions() as $provider => $routes) {
-      $collection = new RouteCollection();
-
+    $collection = new RouteCollection();
+    foreach ($this->getRouteDefinitions() as $routes) {
       // The top-level 'routes_callback' is a list of methods in controller
       // syntax, see \Drupal\Core\Controller\ControllerResolver. These methods
       // should return a set of \Symfony\Component\Routing\Route objects, either
@@ -142,17 +140,19 @@ public function rebuild() {
         $collection->add($name, $route);
       }
 
-      $this->dispatcher->dispatch(RoutingEvents::ALTER, new RouteBuildEvent($collection, $provider));
-      $this->dumper->addRoutes($collection);
-      $this->dumper->dump(array('provider' => $provider));
     }
 
-    // Now allow modules to register additional, dynamic routes.
-    // @todo Either remove this alter or the per-provider alter.
-    $collection = new RouteCollection();
-    $this->dispatcher->dispatch(RoutingEvents::ALTER, new RouteBuildEvent($collection, 'dynamic_routes'));
+    // DYNAMIC is supposed to be used to add new routes based upon all the
+    // static defined ones.
+    $this->dispatcher->dispatch(RoutingEvents::DYNAMIC, new RouteBuildEvent($collection));
+
+    // ALTER is the final step to alter all the existing routes. We cannot stop
+    // people from adding new routes here, but we define two separate steps to
+    // make it clear.
+    $this->dispatcher->dispatch(RoutingEvents::ALTER, new RouteBuildEvent($collection));
+
     $this->dumper->addRoutes($collection);
-    $this->dumper->dump(array('provider' => 'dynamic_routes'));
+    $this->dumper->dump();
 
     $this->state->delete(static::REBUILD_NEEDED);
     $this->lock->release('router_rebuild');
diff --git a/core/lib/Drupal/Core/Routing/RouteSubscriberBase.php b/core/lib/Drupal/Core/Routing/RouteSubscriberBase.php
index f7cf537..c935fa5 100644
--- a/core/lib/Drupal/Core/Routing/RouteSubscriberBase.php
+++ b/core/lib/Drupal/Core/Routing/RouteSubscriberBase.php
@@ -21,11 +21,8 @@
    *
    * @param \Symfony\Component\Routing\RouteCollection $collection
    *   The route collection for adding routes.
-   * @param string $provider
-   *   The provider these routes belong to. For dynamically added routes, the
-   *   provider name will be 'dynamic_routes'.
    */
-  abstract protected function alterRoutes(RouteCollection $collection, $provider);
+  abstract protected function alterRoutes(RouteCollection $collection);
 
   /**
    * {@inheritdoc}
@@ -43,7 +40,7 @@ public static function getSubscribedEvents() {
    */
   public function onAlterRoutes(RouteBuildEvent $event) {
     $collection = $event->getRouteCollection();
-    $this->alterRoutes($collection, $event->getProvider());
+    $this->alterRoutes($collection);
   }
 
 }
diff --git a/core/lib/Drupal/Core/Routing/RoutingEvents.php b/core/lib/Drupal/Core/Routing/RoutingEvents.php
index b5ee212..8df9698 100644
--- a/core/lib/Drupal/Core/Routing/RoutingEvents.php
+++ b/core/lib/Drupal/Core/Routing/RoutingEvents.php
@@ -13,13 +13,16 @@
 final class RoutingEvents {
 
   /**
+   * THE DYNAMIC event is fired on a route collection to allow new routes.
+   *
+   * This event is used to add new routes based upon existing routes.
+   */
+  const DYNAMIC = 'routing.route_dynamic';
+
+  /**
    * The ALTER event is fired on a route collection to allow changes to routes.
    *
    * This event is used to process new routes before they get saved.
-   *
-   * @see \Drupal\Core\Routing\RouteBuildEvent
-   *
-   * @var string
    */
   const ALTER = 'routing.route_alter';
 
diff --git a/core/modules/config_translation/lib/Drupal/config_translation/ConfigMapperInterface.php b/core/modules/config_translation/lib/Drupal/config_translation/ConfigMapperInterface.php
index b572708..28fb744 100644
--- a/core/modules/config_translation/lib/Drupal/config_translation/ConfigMapperInterface.php
+++ b/core/modules/config_translation/lib/Drupal/config_translation/ConfigMapperInterface.php
@@ -9,6 +9,7 @@
 
 use Drupal\Core\Language\Language;
 use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Routing\RouteCollection;
 
 /**
  * Defines an interface for configuration mapper.
@@ -24,6 +25,14 @@
   public function getTitle();
 
   /**
+   * Sets the route collection.
+   *
+   * @param \Symfony\Component\Routing\RouteCollection $collection
+   *   The route collection.
+   */
+  public function setRouteCollection(RouteCollection $collection);
+
+  /**
    * Returns the name of the base route the mapper is attached to.
    *
    * @return string
diff --git a/core/modules/config_translation/lib/Drupal/config_translation/ConfigMapperManager.php b/core/modules/config_translation/lib/Drupal/config_translation/ConfigMapperManager.php
index bdfbe55..91d1039 100644
--- a/core/modules/config_translation/lib/Drupal/config_translation/ConfigMapperManager.php
+++ b/core/modules/config_translation/lib/Drupal/config_translation/ConfigMapperManager.php
@@ -21,6 +21,7 @@
 use Drupal\Core\Plugin\Discovery\ContainerDerivativeDiscoveryDecorator;
 use Drupal\Core\Plugin\Factory\ContainerFactory;
 use Drupal\Core\TypedData\TypedDataInterface;
+use Symfony\Component\Routing\RouteCollection;
 
 /**
  * Manages plugins for configuration translation mappers.
@@ -94,10 +95,13 @@ public function __construct(CacheBackendInterface $cache_backend, LanguageManage
   /**
    * {@inheritdoc}
    */
-  public function getMappers() {
+  public function getMappers(RouteCollection $collection = NULL) {
     $mappers = array();
     foreach($this->getDefinitions() as $id => $definition) {
       $mappers[$id] = $this->createInstance($id);
+      if ($collection) {
+        $mappers[$id]->setRouteCollection($collection);
+      }
     }
 
     return $mappers;
diff --git a/core/modules/config_translation/lib/Drupal/config_translation/ConfigMapperManagerInterface.php b/core/modules/config_translation/lib/Drupal/config_translation/ConfigMapperManagerInterface.php
index 693f25b..8f72f07 100644
--- a/core/modules/config_translation/lib/Drupal/config_translation/ConfigMapperManagerInterface.php
+++ b/core/modules/config_translation/lib/Drupal/config_translation/ConfigMapperManagerInterface.php
@@ -8,6 +8,7 @@
 namespace Drupal\config_translation;
 
 use Drupal\Component\Plugin\PluginManagerInterface;
+use Symfony\Component\Routing\RouteCollection;
 
 /**
  * Provides a common interface for config mapper managers.
@@ -17,10 +18,13 @@
   /**
    * Returns an array of all mappers.
    *
+   * @param \Symfony\Component\Routing\RouteCollection $collection
+   *   The route collection used to initialize the mappers.
+   *
    * @return \Drupal\config_translation\ConfigMapperInterface[]
    *   An array of all mappers.
    */
-  public function getMappers();
+  public function getMappers(RouteCollection $collection = NULL);
 
   /**
    * Returns TRUE if the configuration data has translatable items.
diff --git a/core/modules/config_translation/lib/Drupal/config_translation/ConfigNamesMapper.php b/core/modules/config_translation/lib/Drupal/config_translation/ConfigNamesMapper.php
index 8198a47..f929bc1 100644
--- a/core/modules/config_translation/lib/Drupal/config_translation/ConfigNamesMapper.php
+++ b/core/modules/config_translation/lib/Drupal/config_translation/ConfigNamesMapper.php
@@ -17,6 +17,7 @@
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\Routing\Route;
+use Symfony\Component\Routing\RouteCollection;
 
 /**
  * Configuration mapper base implementation.
@@ -52,6 +53,13 @@ class ConfigNamesMapper extends PluginBase implements ConfigMapperInterface, Con
   protected $baseRoute;
 
   /**
+   * The available routes.
+   *
+   * @var \Symfony\Component\Routing\RouteCollection
+   */
+  protected $routeCollection;
+
+  /**
    * The language code of the language this mapper, if any.
    *
    * @var string|null
@@ -91,14 +99,13 @@ class ConfigNamesMapper extends PluginBase implements ConfigMapperInterface, Con
   public function __construct($plugin_id, array $plugin_definition, ConfigFactoryInterface $config_factory, LocaleConfigManager $locale_config_manager, ConfigMapperManagerInterface $config_mapper_manager, RouteProviderInterface $route_provider, TranslationInterface $translation_manager) {
     $this->pluginId = $plugin_id;
     $this->pluginDefinition = $plugin_definition;
+    $this->routeProvider = $route_provider;
 
     $this->configFactory = $config_factory;
     $this->localeConfigManager = $locale_config_manager;
     $this->configMapperManager = $config_mapper_manager;
 
     $this->setTranslationManager($translation_manager);
-
-    $this->baseRoute = $route_provider->getRouteByName($this->getBaseRouteName());
   }
 
   /**
@@ -121,6 +128,13 @@ public static function create(ContainerInterface $container, array $configuratio
   /**
    * {@inheritdoc}
    */
+  public function setRouteCollection(RouteCollection $collection) {
+    $this->routeCollection = $collection;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function getTitle() {
     // A title from a *.config_translation.yml. Should be translated for
     // display in the current page language.
@@ -145,7 +159,12 @@ public function getBaseRouteParameters() {
    * {@inheritdoc}
    */
   public function getBaseRoute() {
-    return $this->baseRoute;
+    if ($this->routeCollection) {
+      return $this->routeCollection->get($this->getBaseRouteName());
+    }
+    else {
+      return $this->routeProvider->getRouteByName($this->getBaseRouteName());
+    }
   }
 
   /**
diff --git a/core/modules/config_translation/lib/Drupal/config_translation/Routing/RouteSubscriber.php b/core/modules/config_translation/lib/Drupal/config_translation/Routing/RouteSubscriber.php
index 335faa5..d9d56ad 100644
--- a/core/modules/config_translation/lib/Drupal/config_translation/Routing/RouteSubscriber.php
+++ b/core/modules/config_translation/lib/Drupal/config_translation/Routing/RouteSubscriber.php
@@ -9,6 +9,7 @@
 
 use Drupal\Core\Routing\RouteSubscriberBase;
 use Drupal\config_translation\ConfigMapperManagerInterface;
+use Drupal\Core\Routing\RoutingEvents;
 use Symfony\Component\Routing\RouteCollection;
 
 /**
@@ -36,15 +37,9 @@ public function __construct(ConfigMapperManagerInterface $mapper_manager) {
   /**
    * {@inheritdoc}
    */
-  protected function alterRoutes(RouteCollection $collection, $provider) {
-    // @todo \Drupal\config_translation\ConfigNamesMapper uses the route
-    //   provider directly, which is unsafe during rebuild. This currently only
-    //   works by coincidence; fix in https://drupal.org/node/2158571.
-    if ($provider != 'dynamic_routes') {
-      return;
-    }
+  protected function alterRoutes(RouteCollection $collection) {
+    $mappers = $this->mapperManager->getMappers($collection);
 
-    $mappers = $this->mapperManager->getMappers();
     foreach ($mappers as $mapper) {
       $collection->add($mapper->getOverviewRouteName(), $mapper->getOverviewRoute());
       $collection->add($mapper->getAddRouteName(), $mapper->getAddRoute());
@@ -53,4 +48,13 @@ protected function alterRoutes(RouteCollection $collection, $provider) {
     }
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public static function getSubscribedEvents() {
+    // Come after field_ui.
+    $events[RoutingEvents::ALTER] = array('onAlterRoutes', -110);
+    return $events;
+  }
+
 }
diff --git a/core/modules/content_translation/lib/Drupal/content_translation/Routing/ContentTranslationRouteSubscriber.php b/core/modules/content_translation/lib/Drupal/content_translation/Routing/ContentTranslationRouteSubscriber.php
index cab9ac4..8b89d27 100644
--- a/core/modules/content_translation/lib/Drupal/content_translation/Routing/ContentTranslationRouteSubscriber.php
+++ b/core/modules/content_translation/lib/Drupal/content_translation/Routing/ContentTranslationRouteSubscriber.php
@@ -38,7 +38,7 @@ public function __construct(ContentTranslationManagerInterface $content_translat
   /**
    * {@inheritdoc}
    */
-  protected function alterRoutes(RouteCollection $collection, $provider) {
+  protected function alterRoutes(RouteCollection $collection) {
     foreach ($this->contentTranslationManager->getSupportedEntityTypes() as $entity_type_id => $entity_type) {
       // Try to get the route from the current collection.
       if (!$entity_route = $collection->get($entity_type->getLinkTemplate('canonical'))) {
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Routing/RouteSubscriber.php b/core/modules/field_ui/lib/Drupal/field_ui/Routing/RouteSubscriber.php
index 14b1b6b..e7dbc00 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/Routing/RouteSubscriber.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/Routing/RouteSubscriber.php
@@ -38,7 +38,7 @@ public function __construct(EntityManagerInterface $manager) {
   /**
    * {@inheritdoc}
    */
-  protected function alterRoutes(RouteCollection $collection, $provider) {
+  protected function alterRoutes(RouteCollection $collection) {
     foreach ($this->manager->getDefinitions() as $entity_type_id => $entity_type) {
       $defaults = array();
       if ($entity_type->isFieldable() && $entity_type->hasLinkTemplate('admin-form')) {
diff --git a/core/modules/node/lib/Drupal/node/EventSubscriber/NodeAdminRouteSubscriber.php b/core/modules/node/lib/Drupal/node/EventSubscriber/NodeAdminRouteSubscriber.php
index 45cfa3d..4b5fcb0 100644
--- a/core/modules/node/lib/Drupal/node/EventSubscriber/NodeAdminRouteSubscriber.php
+++ b/core/modules/node/lib/Drupal/node/EventSubscriber/NodeAdminRouteSubscriber.php
@@ -36,7 +36,7 @@ public function __construct(ConfigFactoryInterface $config_factory) {
   /**
    * {@inheritdoc}
    */
-  protected function alterRoutes(RouteCollection $collection, $provider) {
+  protected function alterRoutes(RouteCollection $collection) {
     if ($this->configFactory->get('node.settings')->get('use_admin_theme')) {
       foreach ($collection->all() as $route) {
         if ($route->hasOption('_node_operation_route')) {
diff --git a/core/modules/rest/lib/Drupal/rest/Routing/ResourceRoutes.php b/core/modules/rest/lib/Drupal/rest/Routing/ResourceRoutes.php
index fcea617..da7a137 100644
--- a/core/modules/rest/lib/Drupal/rest/Routing/ResourceRoutes.php
+++ b/core/modules/rest/lib/Drupal/rest/Routing/ResourceRoutes.php
@@ -66,7 +66,7 @@ public function routes() {
 
     // Iterate over all enabled resource plugins.
     foreach ($enabled_resources as $id => $enabled_methods) {
-      $plugin = $this->manager->getInstance(array('id' => $id));
+      $plugin = $this->manager->createInstance($id);
 
       foreach ($plugin->routes() as $name => $route) {
         $method = $route->getRequirement('_method');
diff --git a/core/modules/system/lib/Drupal/system/EventSubscriber/AdminRouteSubscriber.php b/core/modules/system/lib/Drupal/system/EventSubscriber/AdminRouteSubscriber.php
index ef70321..eef05e1 100644
--- a/core/modules/system/lib/Drupal/system/EventSubscriber/AdminRouteSubscriber.php
+++ b/core/modules/system/lib/Drupal/system/EventSubscriber/AdminRouteSubscriber.php
@@ -19,7 +19,7 @@ class AdminRouteSubscriber extends RouteSubscriberBase {
   /**
    * {@inheritdoc}
    */
-  protected function alterRoutes(RouteCollection $collection, $provider) {
+  protected function alterRoutes(RouteCollection $collection) {
     foreach ($collection->all() as $route) {
       if (strpos($route->getPath(), '/admin') === 0 && !$route->hasOption('_admin_route')) {
         $route->setOption('_admin_route', TRUE);
diff --git a/core/modules/system/tests/modules/router_test_directory/lib/Drupal/router_test/RouteTestSubscriber.php b/core/modules/system/tests/modules/router_test_directory/lib/Drupal/router_test/RouteTestSubscriber.php
index 39fa645..a2fcad0 100644
--- a/core/modules/system/tests/modules/router_test_directory/lib/Drupal/router_test/RouteTestSubscriber.php
+++ b/core/modules/system/tests/modules/router_test_directory/lib/Drupal/router_test/RouteTestSubscriber.php
@@ -17,12 +17,10 @@ class RouteTestSubscriber extends RouteSubscriberBase {
   /**
    * {@inheritdoc}
    */
-  protected function alterRoutes(RouteCollection $collection, $provider) {
-    if ($provider == 'router_test') {
-      $route = $collection->get('router_test.6');
-      // Change controller method from test1 to test5.
-      $route->setDefault('_content', '\Drupal\router_test\TestControllers::test5');
-    }
+  protected function alterRoutes(RouteCollection $collection) {
+    $route = $collection->get('router_test.6');
+    // Change controller method from test1 to test5.
+    $route->setDefault('_content', '\Drupal\router_test\TestControllers::test5');
   }
 
 }
diff --git a/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php b/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php
index 773c09a..7b8097b 100644
--- a/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php
+++ b/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php
@@ -155,7 +155,7 @@ public function routes() {
   /**
    * {@inheritdoc}
    */
-  protected function alterRoutes(RouteCollection $collection, $provider) {
+  protected function alterRoutes(RouteCollection $collection) {
     foreach ($this->getViewsDisplayIDsWithRoute() as $pair) {
       list($view_id, $display_id) = explode('.', $pair);
       $view = $this->viewStorage->load($view_id);
