diff --git a/core/modules/rest/lib/Drupal/rest/Plugin/Derivative/EntityDerivative.php b/core/modules/rest/lib/Drupal/rest/Plugin/Derivative/EntityDerivative.php
index 310d843..2f58bcf 100644
--- a/core/modules/rest/lib/Drupal/rest/Plugin/Derivative/EntityDerivative.php
+++ b/core/modules/rest/lib/Drupal/rest/Plugin/Derivative/EntityDerivative.php
@@ -7,12 +7,14 @@
 
 namespace Drupal\rest\Plugin\Derivative;
 
-use Drupal\Component\Plugin\Derivative\DerivativeInterface;
+use Drupal\Core\Plugin\Discovery\ContainerDerivativeInterface;
+use Drupal\Core\Entity\EntityManager;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Provides a resource plugin definition for every entity type.
  */
-class EntityDerivative implements DerivativeInterface {
+class EntityDerivative implements ContainerDerivativeInterface {
 
   /**
    * List of derivative definitions.
@@ -22,6 +24,36 @@ class EntityDerivative implements DerivativeInterface {
   protected $derivatives;
 
   /**
+   * The entity plugin manager.
+   *
+   * @var \Drupal\Core\Entity\EntityManager
+   */
+  protected $entityManager;
+
+  /**
+   * Constructs a EntityDerivative object.
+   *
+   * @param string $base_plugin_id
+   *   The base plugin ID.
+   * @param \Drupal\Core\Entity\EntityStorageControllerInterface $view_storage_controller
+   *   The entity storage controller to load views.
+   */
+  public function __construct($base_plugin_id, EntityManager $entity_manager) {
+    $this->basePluginId = $base_plugin_id;
+    $this->entityManager = $entity_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, $base_plugin_id) {
+    return new static(
+      $base_plugin_id,
+      $container->get('plugin.manager.entity')
+    );
+  }
+
+  /**
    * Implements DerivativeInterface::getDerivativeDefinition().
    */
   public function getDerivativeDefinition($derivative_id, array $base_plugin_definition) {
@@ -39,7 +71,7 @@ public function getDerivativeDefinition($derivative_id, array $base_plugin_defin
   public function getDerivativeDefinitions(array $base_plugin_definition) {
     if (!isset($this->derivatives)) {
       // Add in the default plugin configuration and the resource type.
-      foreach (entity_get_info() as $entity_type => $entity_info) {
+      foreach ($this->entityManager->getDefinitions() as $entity_type => $entity_info) {
         $this->derivatives[$entity_type] = array(
           'id' => 'entity:' . $entity_type,
           'entity_type' => $entity_type,
diff --git a/core/modules/rest/lib/Drupal/rest/Plugin/Type/ResourcePluginManager.php b/core/modules/rest/lib/Drupal/rest/Plugin/Type/ResourcePluginManager.php
index 6edea17..3db449c 100644
--- a/core/modules/rest/lib/Drupal/rest/Plugin/Type/ResourcePluginManager.php
+++ b/core/modules/rest/lib/Drupal/rest/Plugin/Type/ResourcePluginManager.php
@@ -7,33 +7,33 @@
 
 namespace Drupal\rest\Plugin\Type;
 
-use Drupal\Component\Plugin\Discovery\DerivativeDiscoveryDecorator;
-use Drupal\Component\Plugin\Factory\ReflectionFactory;
-use Drupal\Component\Plugin\PluginManagerBase;
-use Drupal\Core\Plugin\Discovery\AlterDecorator;
-use Drupal\Core\Plugin\Discovery\AnnotatedClassDiscovery;
-use Drupal\Core\Plugin\Discovery\CacheDecorator;
+use Drupal\Core\Plugin\DefaultPluginManager;
+use Drupal\Core\Cache\CacheBackendInterface;
+use Drupal\Core\Language\LanguageManager;
+use Drupal\Core\Extension\ModuleHandlerInterface;
 
 /**
  * Manages discovery and instantiation of resource plugins.
  */
-class ResourcePluginManager extends PluginManagerBase {
+class ResourcePluginManager extends DefaultPluginManager {
 
   /**
-   * Overrides Drupal\Component\Plugin\PluginManagerBase::__construct().
+   * Constructs a new ResourcePluginManager object.
    *
    * @param \Traversable $namespaces
    *   An object that implements \Traversable which contains the root paths
-   *   keyed by the corresponding namespace to look for plugin implementations,
+   *   keyed by the corresponding namespace to look for plugin implementations.
+   * @param \Drupal\Core\Cache\CacheBackendInterface $cache_backend
+   *   Cache backend instance to use.
+   * @param \Drupal\Core\Language\LanguageManager $language_manager
+   *   The language manager.
+   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   The module handler to invoke the alter hook with.
    */
-  public function __construct(\Traversable $namespaces) {
-    // Create resource plugin derivatives from declaratively defined resources.
-    $this->discovery = new AnnotatedClassDiscovery('rest/resource', $namespaces);
-    $this->discovery = new DerivativeDiscoveryDecorator($this->discovery);
-    $this->discovery = new AlterDecorator($this->discovery, 'rest_resource');
-    $this->discovery = new CacheDecorator($this->discovery, 'rest');
-
-    $this->factory = new ReflectionFactory($this->discovery);
+  public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, LanguageManager $language_manager, ModuleHandlerInterface $module_handler) {
+    parent::__construct('rest/resource', $namespaces);
+    $this->alterInfo($module_handler, 'rest_resource');
+    $this->setCacheBackend($cache_backend, $language_manager, 'rest');
   }
 
   /**
diff --git a/core/modules/rest/rest.services.yml b/core/modules/rest/rest.services.yml
index 97817ad..710cab7 100644
--- a/core/modules/rest/rest.services.yml
+++ b/core/modules/rest/rest.services.yml
@@ -1,7 +1,7 @@
 services:
   plugin.manager.rest:
     class: Drupal\rest\Plugin\Type\ResourcePluginManager
-    arguments: ['@container.namespaces']
+    arguments: ['@container.namespaces', '@cache.cache', '@language_manager', '@module_handler']
   rest.route_subscriber:
     class: Drupal\rest\EventSubscriber\RouteSubscriber
     tags:
