diff --git a/core/lib/Drupal/Core/Entity/DatabaseStorageController.php b/core/lib/Drupal/Core/Entity/DatabaseStorageController.php
index 44ea24b..375933f 100644
--- a/core/lib/Drupal/Core/Entity/DatabaseStorageController.php
+++ b/core/lib/Drupal/Core/Entity/DatabaseStorageController.php
@@ -14,7 +14,6 @@
 use Drupal\Core\Language\Language;
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Component\Uuid\Uuid;
-use Drupal\field\FieldInfo;
 use Drupal\field\FieldUpdateForbiddenException;
 use Drupal\field\FieldInterface;
 use Drupal\field\FieldInstanceInterface;
@@ -50,13 +49,6 @@ class DatabaseStorageController extends EntityStorageControllerBase {
   protected $database;
 
   /**
-   * The field info object.
-   *
-   * @var \Drupal\field\FieldInfo
-   */
-  protected $fieldInfo;
-
-  /**
    * {@inheritdoc}
    */
   public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
diff --git a/core/modules/field/field.info.inc b/core/modules/field/field.info.inc
index 119f6fa..4743bea 100644
--- a/core/modules/field/field.info.inc
+++ b/core/modules/field/field.info.inc
@@ -39,7 +39,7 @@ function field_info_cache_clear() {
   \Drupal::service('plugin.manager.field.field_type')->clearCachedDefinitions();
   \Drupal::service('config.factory')->reset();
 
-  Field::fieldInfo()->flush();
+  Field::fieldInfo()->clearCachedDefinitions();
 }
 
 /**
diff --git a/core/modules/field/lib/Drupal/field/FieldInfo.php b/core/modules/field/lib/Drupal/field/FieldInfo.php
index 86db989..77fca3a 100644
--- a/core/modules/field/lib/Drupal/field/FieldInfo.php
+++ b/core/modules/field/lib/Drupal/field/FieldInfo.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\field;
 
+use Drupal\Component\Plugin\Discovery\CachedDiscoveryInterface;
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Cache\CacheBackendInterface;
 use Drupal\Core\Config\ConfigFactoryInterface;
@@ -30,7 +31,7 @@
  * potentially large array of information. In many cases, the lightweight
  * getFieldMap() method should be preferred.
  */
-class FieldInfo {
+class FieldInfo implements CachedDiscoveryInterface {
 
   /**
    * The cache backend to use.
@@ -143,9 +144,9 @@ public function __construct(CacheBackendInterface $cache_backend, ConfigFactoryI
   }
 
   /**
-   * Clears the "static" and persistent caches.
+   * {@inheritdoc}
    */
-  public function flush() {
+  public function clearCachedDefinitions() {
     $this->fieldMap = NULL;
 
     $this->fieldsById = array();
@@ -163,6 +164,20 @@ public function flush() {
   }
 
   /**
+   * {@inheritdoc}
+   */
+  public function getDefinitions() {
+    return $this->getFields();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDefinition($field_id) {
+    return $this->getFieldById($field_id);
+  }
+
+  /**
    * Collects a lightweight map of fields across bundles.
    *
    * @return array
diff --git a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkStorageController.php b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkStorageController.php
index d244a71..8634868 100644
--- a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkStorageController.php
+++ b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkStorageController.php
@@ -13,7 +13,6 @@
 use Drupal\Core\Entity\EntityStorageException;
 use Drupal\Core\Database\Connection;
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\field\FieldInfo;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Cmf\Component\Routing\RouteProviderInterface;
 
diff --git a/core/modules/migrate/lib/Drupal/migrate/Plugin/migrate/destination/Entity.php b/core/modules/migrate/lib/Drupal/migrate/Plugin/migrate/destination/Entity.php
index 97e4121..5b7333c 100644
--- a/core/modules/migrate/lib/Drupal/migrate/Plugin/migrate/destination/Entity.php
+++ b/core/modules/migrate/lib/Drupal/migrate/Plugin/migrate/destination/Entity.php
@@ -9,7 +9,6 @@
 
 use Drupal\Core\Entity\EntityStorageControllerInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
-use Drupal\field\FieldInfo;
 use Drupal\migrate\Entity\Migration;
 use Drupal\migrate\Plugin\MigratePluginManager;
 use Drupal\migrate\Row;
diff --git a/core/modules/path/lib/Drupal/path/Tests/PathLanguageTest.php b/core/modules/path/lib/Drupal/path/Tests/PathLanguageTest.php
index 0653743..007acfc 100644
--- a/core/modules/path/lib/Drupal/path/Tests/PathLanguageTest.php
+++ b/core/modules/path/lib/Drupal/path/Tests/PathLanguageTest.php
@@ -68,7 +68,7 @@ function setUp() {
     $this->drupalPostForm('admin/config/regional/content-language', $edit, t('Save'));
 
     // Ensure configuration changes are picked up in the host environment.
-    Field::fieldInfo()->flush();
+    Field::fieldInfo()->clearCachedDefinitions();
     $field = Field::fieldInfo()->getField('node', 'body');
     $this->assertTrue($field->isTranslatable(), 'Node body is translatable.');
   }
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityLanguageTestBase.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityLanguageTestBase.php
index 1264577..2596520 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityLanguageTestBase.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityLanguageTestBase.php
@@ -137,7 +137,7 @@ protected function toggleFieldTranslatability($entity_type) {
       $translatable = !$field->isTranslatable();
       $field->set('translatable', $translatable);
       $field->save();
-      FieldService::fieldInfo()->flush();
+      FieldService::fieldInfo()->clearCachedDefinitions();
       $field = FieldService::fieldInfo()->getField($entity_type, $field_name);
       $this->assertEqual($field->isTranslatable(), $translatable, 'Field translatability changed.');
     }
