diff --git a/core/lib/Drupal/Core/Block/BlockManager.php b/core/lib/Drupal/Core/Block/BlockManager.php
index a837340..af464dd 100644
--- a/core/lib/Drupal/Core/Block/BlockManager.php
+++ b/core/lib/Drupal/Core/Block/BlockManager.php
@@ -7,6 +7,7 @@
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Plugin\CategorizingPluginManagerTrait;
 use Drupal\Core\Plugin\Context\ContextAwarePluginManagerTrait;
+use Drupal\Core\Plugin\ContextAwarePluginInterface;
 use Drupal\Core\Plugin\DefaultPluginManager;
 
 /**
@@ -44,6 +45,20 @@ public function __construct(\Traversable $namespaces, CacheBackendInterface $cac
 
   /**
    * {@inheritdoc}
+   *
+   * @return \Drupal\Core\Block\BlockPluginInterface
+   */
+  public function createInstance($plugin_id, array $configuration = []) {
+    $block = parent::createInstance($plugin_id, $configuration);
+    if ($block instanceof ContextAwarePluginInterface) {
+      $contexts = $this->contextRepository()->getRuntimeContexts(array_values($block->getContextMapping()));
+      $this->contextHandler()->applyContextMapping($block, $contexts);
+    }
+    return $block;
+  }
+
+  /**
+   * {@inheritdoc}
    */
   public function processDefinition(&$definition, $plugin_id) {
     parent::processDefinition($definition, $plugin_id);
diff --git a/core/lib/Drupal/Core/Plugin/Context/ContextAwarePluginManagerTrait.php b/core/lib/Drupal/Core/Plugin/Context/ContextAwarePluginManagerTrait.php
index afe2aa5..7a6403f 100644
--- a/core/lib/Drupal/Core/Plugin/Context/ContextAwarePluginManagerTrait.php
+++ b/core/lib/Drupal/Core/Plugin/Context/ContextAwarePluginManagerTrait.php
@@ -8,6 +8,15 @@
 trait ContextAwarePluginManagerTrait {
 
   /**
+   * Wraps the context repository.
+   *
+   * @return \Drupal\Core\Plugin\Context\ContextRepositoryInterface
+   */
+  protected function contextRepository() {
+    return \Drupal::service('context.repository');
+  }
+
+  /**
    * Wraps the context handler.
    *
    * @return \Drupal\Core\Plugin\Context\ContextHandlerInterface
diff --git a/core/modules/block/src/BlockAccessControlHandler.php b/core/modules/block/src/BlockAccessControlHandler.php
index 176c326..4fe74f7 100644
--- a/core/modules/block/src/BlockAccessControlHandler.php
+++ b/core/modules/block/src/BlockAccessControlHandler.php
@@ -110,12 +109,8 @@ protected function checkAccess(EntityInterface $entity, $operation, AccountInter
       }
       elseif ($this->resolveConditions($conditions, 'and') !== FALSE) {
         // Delegate to the plugin.
-        $block_plugin = $entity->getPlugin();
         try {
-          if ($block_plugin instanceof ContextAwarePluginInterface) {
-            $contexts = $this->contextRepository->getRuntimeContexts(array_values($block_plugin->getContextMapping()));
-            $this->contextHandler->applyContextMapping($block_plugin, $contexts);
-          }
+          $block_plugin = $entity->getPlugin();
           $access = $block_plugin->access($account, TRUE);
         }
         catch (ContextException $e) {
diff --git a/core/modules/block/src/BlockViewBuilder.php b/core/modules/block/src/BlockViewBuilder.php
index 3b20d7b..850d37a 100644
--- a/core/modules/block/src/BlockViewBuilder.php
+++ b/core/modules/block/src/BlockViewBuilder.php
@@ -138,12 +138,6 @@ protected static function buildPreRenderableBlock($entity, ModuleHandlerInterfac
     $derivative_id = $plugin->getDerivativeId();
     $configuration = $plugin->getConfiguration();
 
-    // Inject runtime contexts.
-    if ($plugin instanceof ContextAwarePluginInterface) {
-      $contexts = \Drupal::service('context.repository')->getRuntimeContexts($plugin->getContextMapping());
-      \Drupal::service('context.handler')->applyContextMapping($plugin, $contexts);
-    }
-
     // Create the render array for the block as a whole.
     // @see template_preprocess_block().
     $build = [
