diff --git a/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php b/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php
index bf7eca2..ed0681e 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php
@@ -139,7 +139,7 @@ class View extends ConfigEntityBase implements ViewStorageInterface {
   public function get($property_name, $langcode = NULL) {
     // Ensure that an executable View is available.
     if ($property_name == 'executable' && !isset($this->{$property_name})) {
-      $this->set('executable', new ViewExecutable($this));
+      $this->set('executable', drupal_container()->get('views.executable')->get($this));
     }
 
     return parent::get($property_name, $langcode);
diff --git a/core/modules/views/lib/Drupal/views/Tests/DefaultViewsTest.php b/core/modules/views/lib/Drupal/views/Tests/DefaultViewsTest.php
index a075b6a..7e8fc93 100644
--- a/core/modules/views/lib/Drupal/views/Tests/DefaultViewsTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/DefaultViewsTest.php
@@ -123,7 +123,7 @@ public function testDefaultViews() {
     $views = $controller->load();
 
     foreach ($views as $name => $view_storage) {
-      $view = new ViewExecutable($view_storage);
+      $view = $view_storage->get('executable');
       $view->initDisplay();
       foreach ($view->storage->get('display') as $display_id => $display) {
         $view->setDisplay($display_id);
diff --git a/core/modules/views/lib/Drupal/views/Tests/Handler/HandlerAllTest.php b/core/modules/views/lib/Drupal/views/Tests/Handler/HandlerAllTest.php
index 1043b64..dca0da1 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Handler/HandlerAllTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Handler/HandlerAllTest.php
@@ -60,7 +60,7 @@ public function testHandlers() {
       }
 
       $view = entity_create('view', array('base_table' => $base_table));
-      $view = new ViewExecutable($view);
+      $view = $view->get('executable');
 
       // @todo The groupwise relationship is currently broken.
       $exclude[] = 'taxonomy_term_data:tid_representative';
diff --git a/core/modules/views/lib/Drupal/views/Tests/ViewExecutableTest.php b/core/modules/views/lib/Drupal/views/Tests/ViewExecutableTest.php
index b5c6711..e98d41b 100644
--- a/core/modules/views/lib/Drupal/views/Tests/ViewExecutableTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/ViewExecutableTest.php
@@ -9,6 +9,7 @@
 
 use Symfony\Component\HttpFoundation\Response;
 use Drupal\views\ViewExecutable;
+use Drupal\views\ViewExecutableFactory;
 use Drupal\views\DisplayBag;
 use Drupal\views\Plugin\views\display\DefaultDisplay;
 use Drupal\views\Plugin\views\display\Page;
@@ -82,6 +83,16 @@ protected function setUp() {
   }
 
   /**
+   * Tests the views.exectuable container service.
+   */
+  public function testFactoryService() {
+    $factory = drupal_container()->get('views.executable');
+    $this->assertTrue($factory instanceof ViewExecutableFactory, 'An ViewExecutableFactory instance was returned from the container.');
+    $view = entity_load('view', 'test_executable_displays');
+    $this->assertTrue($factory->get($view) instanceof ViewExecutable, 'An ViewExecutable instance was returned from the factory.');
+  }
+
+  /**
    * Tests the initDisplay() and initHandlers() methods.
    */
   public function testInitMethods() {
diff --git a/core/modules/views/lib/Drupal/views/ViewExecutableFactory.php b/core/modules/views/lib/Drupal/views/ViewExecutableFactory.php
new file mode 100644
index 0000000..59a052a
--- /dev/null
+++ b/core/modules/views/lib/Drupal/views/ViewExecutableFactory.php
@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\views\ViewExecutableFactory.
+ */
+
+namespace Drupal\views;
+
+use Drupal\views\Plugin\Core\Entity\View;
+
+/**
+ * Defines the cache backend factory.
+ */
+class ViewExecutableFactory {
+
+  /**
+   * Instantiates a ViewExecutable class.
+   *
+   * @param \Drupal\views\Plugin\Core\Entity\View $view
+   *   A view entity instance.
+   *
+   * @return \Drupal\views\ViewExecutable
+   *   A ViewExecutable instance.
+   */
+  public static function get(View $view) {
+    return new ViewExecutable($view);
+  }
+
+}
diff --git a/core/modules/views/lib/Drupal/views/ViewsBundle.php b/core/modules/views/lib/Drupal/views/ViewsBundle.php
index 544b8c3..dfb6dd6 100644
--- a/core/modules/views/lib/Drupal/views/ViewsBundle.php
+++ b/core/modules/views/lib/Drupal/views/ViewsBundle.php
@@ -35,6 +35,8 @@ public function build(ContainerBuilder $container) {
     $container->register('views.views_data', 'Drupal\views\ViewsDataCache')
       ->addArgument(new Reference('cache.views_info'))
       ->addArgument(new Reference('config.factory'));
+
+    $container->register('views.executable', 'Drupal\views\ViewExecutableFactory');
   }
 
 }
