diff --git a/core/lib/Drupal/Core/Theme/Registry.php b/core/lib/Drupal/Core/Theme/Registry.php
index 0167a74..9606b18 100644
--- a/core/lib/Drupal/Core/Theme/Registry.php
+++ b/core/lib/Drupal/Core/Theme/Registry.php
@@ -236,7 +236,7 @@ public function get() {
   public function getRuntime() {
     $this->init($this->themeName);
     if (!isset($this->runtimeRegistry)) {
-      $this->runtimeRegistry = new ThemeRegistry('theme_registry:runtime:' . $this->theme->getName(), $this->cache, $this->lock, array('theme_registry'), $this->moduleHandler->isLoaded());
+      $this->runtimeRegistry = new ThemeRegistry('theme_registry:runtime:' . $this->theme->getName(), $this->cache, $this->lock, array('theme_registry'), $this->moduleHandler->isLoaded(), $this);
     }
     return $this->runtimeRegistry;
   }
diff --git a/core/lib/Drupal/Core/Utility/ThemeRegistry.php b/core/lib/Drupal/Core/Utility/ThemeRegistry.php
index c5e6055..16f7354 100644
--- a/core/lib/Drupal/Core/Utility/ThemeRegistry.php
+++ b/core/lib/Drupal/Core/Utility/ThemeRegistry.php
@@ -12,6 +12,7 @@
 use Drupal\Core\Cache\CacheCollector;
 use Drupal\Core\DestructableInterface;
 use Drupal\Core\Lock\LockBackendInterface;
+use Drupal\Core\Theme\Registry;
 
 /**
  * Builds the run-time theme registry.
@@ -38,6 +39,11 @@ class ThemeRegistry extends CacheCollector implements DestructableInterface {
   protected $completeRegistry;
 
   /**
+   * The complete registry instance to use for resolution of cache misses.
+   */
+  protected $registryInstance;
+
+  /**
    * Constructs a ThemeRegistry object.
    *
    * @param string $cid
@@ -51,7 +57,7 @@ class ThemeRegistry extends CacheCollector implements DestructableInterface {
    * @param bool $modules_loaded
    *   Whether all modules have already been loaded.
    */
-  function __construct($cid, CacheBackendInterface $cache, LockBackendInterface $lock, $tags = array(), $modules_loaded = FALSE) {
+  function __construct($cid, CacheBackendInterface $cache, LockBackendInterface $lock, $tags = array(), $modules_loaded = FALSE, Registry $registry_instance = NULL) {
     $this->cid = $cid;
     $this->cache = $cache;
     $this->lock = $lock;
@@ -61,6 +67,8 @@ function __construct($cid, CacheBackendInterface $cache, LockBackendInterface $l
      // @todo: Implement lazyload.
     $this->cacheLoaded = TRUE;
 
+    $this->registryInstance = $registry_instance;
+
     if ($this->persistable && $cached = $this->cache->get($this->cid)) {
       $this->storage = $cached->data;
     }
@@ -87,13 +95,19 @@ function __construct($cid, CacheBackendInterface $cache, LockBackendInterface $l
    *   initialized to NULL.
    */
   function initializeRegistry() {
-    // @todo DIC this.
-    $this->completeRegistry = \Drupal::service('theme.registry')->get();
+    $this->setCompleteRegistry();
 
     return array_fill_keys(array_keys($this->completeRegistry), NULL);
   }
 
   /**
+   * Sets the complete theme registry array.
+   */
+  protected function setCompleteRegistry() {
+    $this->completeRegistry = $this->getRegistryInstance()->get();
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function has($key) {
@@ -120,11 +134,25 @@ public function get($key) {
   }
 
   /**
+   * Gets the Registry instance used by this ThemeRegistry.
+   *
+   * @return \Drupal\Core\Theme\Registry
+   */
+  protected function getRegistryInstance() {
+    if ($this->registryInstance == NULL) {
+      // @todo DIC this.
+      return \Drupal::service('theme.registry');
+    } else {
+      return $this->registryInstance;
+    }
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function resolveCacheMiss($key) {
     if (!isset($this->completeRegistry)) {
-      $this->completeRegistry = \Drupal::service('theme.registry')->get();
+      $this->setCompleteRegistry();
     }
     $this->storage[$key] = $this->completeRegistry[$key];
     if ($this->persistable) {
