diff --git a/core/lib/Drupal/Core/Entity/EntityAccessControlHandler.php b/core/lib/Drupal/Core/Entity/EntityAccessControlHandler.php
index cfcb5fc..34043d5 100644
--- a/core/lib/Drupal/Core/Entity/EntityAccessControlHandler.php
+++ b/core/lib/Drupal/Core/Entity/EntityAccessControlHandler.php
@@ -3,6 +3,7 @@
 namespace Drupal\Core\Entity;
 
 use Drupal\Core\Access\AccessResult;
+use Drupal\Core\Extension\ModuleHandlerTrait;
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Language\LanguageInterface;
@@ -11,7 +12,9 @@
 /**
  * Defines a default implementation for entity access control handler.
  */
-class EntityAccessControlHandler extends EntityHandlerBase implements EntityAccessControlHandlerInterface {
+class EntityAccessControlHandler implements EntityAccessControlHandlerInterface {
+
+  use ModuleHandlerTrait;
 
   /**
    * Stores calculated access check results.
diff --git a/core/lib/Drupal/Core/Entity/EntityHandlerBase.php b/core/lib/Drupal/Core/Entity/EntityHandlerBase.php
index e2b6e1c..4e5dc85 100644
--- a/core/lib/Drupal/Core/Entity/EntityHandlerBase.php
+++ b/core/lib/Drupal/Core/Entity/EntityHandlerBase.php
@@ -3,7 +3,7 @@
 namespace Drupal\Core\Entity;
 
 use Drupal\Core\DependencyInjection\DependencySerializationTrait;
-use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\Core\Extension\ModuleHandlerTrait;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
 
 /**
@@ -12,45 +12,15 @@
  * @deprecated in Drupal 8.0.x, will be removed before Drupal 9.0.0.
  *   Implement the container injection pattern of
  *   \Drupal\Core\Entity\EntityHandlerInterface::createInstance() to obtain the
- *   module handler service for your class.
+ *   module handler service for your class. You can use the service traits and
+ *   call their setter methods in the createInstance() factory method, or you
+ *   can implement your own injection process.
  *
  * @ingroup entity_api
  */
 abstract class EntityHandlerBase {
   use StringTranslationTrait;
   use DependencySerializationTrait;
-
-  /**
-   * The module handler to invoke hooks on.
-   *
-   * @var \Drupal\Core\Extension\ModuleHandlerInterface
-   */
-  protected $moduleHandler;
-
-  /**
-   * Gets the module handler.
-   *
-   * @return \Drupal\Core\Extension\ModuleHandlerInterface
-   *   The module handler.
-   */
-  protected function moduleHandler() {
-    if (!$this->moduleHandler) {
-      $this->moduleHandler = \Drupal::moduleHandler();
-    }
-    return $this->moduleHandler;
-  }
-
-  /**
-   * Sets the module handler for this handler.
-   *
-   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
-   *   The module handler.
-   *
-   * @return $this
-   */
-  public function setModuleHandler(ModuleHandlerInterface $module_handler) {
-    $this->moduleHandler = $module_handler;
-    return $this;
-  }
+  use ModuleHandlerTrait;
 
 }
diff --git a/core/lib/Drupal/Core/Entity/EntityListBuilder.php b/core/lib/Drupal/Core/Entity/EntityListBuilder.php
index b9c8db3..b6e172f 100644
--- a/core/lib/Drupal/Core/Entity/EntityListBuilder.php
+++ b/core/lib/Drupal/Core/Entity/EntityListBuilder.php
@@ -3,13 +3,20 @@
 namespace Drupal\Core\Entity;
 
 use Symfony\Component\DependencyInjection\ContainerInterface;
+use Drupal\Core\DependencyInjection\DependencySerializationTrait;
+use Drupal\Core\Extension\ModuleHandlerTrait;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 
 /**
  * Defines a generic implementation to build a listing of entities.
  *
  * @ingroup entity_api
  */
-class EntityListBuilder extends EntityHandlerBase implements EntityListBuilderInterface, EntityHandlerInterface {
+class EntityListBuilder implements EntityListBuilderInterface, EntityHandlerInterface {
+
+  use DependencySerializationTrait;
+  use ModuleHandlerTrait;
+  use StringTranslationTrait;
 
   /**
    * The entity storage class.
@@ -46,10 +53,13 @@ class EntityListBuilder extends EntityHandlerBase implements EntityListBuilderIn
    * {@inheritdoc}
    */
   public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
-    return new static(
+    $builder = new static(
       $entity_type,
       $container->get('entity.manager')->getStorage($entity_type->id())
     );
+    $builder->setModuleHandler($container->get('module_handler'));
+    $builder->setStringTranslation($container->get('string_translation'));
+    return $builder;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/EntityStorageBase.php b/core/lib/Drupal/Core/Entity/EntityStorageBase.php
index f583121..e7163b4 100644
--- a/core/lib/Drupal/Core/Entity/EntityStorageBase.php
+++ b/core/lib/Drupal/Core/Entity/EntityStorageBase.php
@@ -2,12 +2,17 @@
 
 namespace Drupal\Core\Entity;
 
+use Drupal\Core\DependencyInjection\DependencySerializationTrait;
 use Drupal\Core\Entity\Query\QueryInterface;
+use Drupal\Core\Extension\ModuleHandlerTrait;
 
 /**
  * A base entity storage class.
  */
-abstract class EntityStorageBase extends EntityHandlerBase implements EntityStorageInterface, EntityHandlerInterface {
+abstract class EntityStorageBase implements EntityStorageInterface, EntityHandlerInterface {
+
+  use DependencySerializationTrait;
+  use ModuleHandlerTrait;
 
   /**
    * Static cache of entities, keyed by entity ID.
diff --git a/core/lib/Drupal/Core/Entity/EntityViewBuilder.php b/core/lib/Drupal/Core/Entity/EntityViewBuilder.php
index 8bfb3a3..1b8b279 100644
--- a/core/lib/Drupal/Core/Entity/EntityViewBuilder.php
+++ b/core/lib/Drupal/Core/Entity/EntityViewBuilder.php
@@ -3,8 +3,10 @@
 namespace Drupal\Core\Entity;
 
 use Drupal\Core\Cache\Cache;
+use Drupal\Core\DependencyInjection\DependencySerializationTrait;
 use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
 use Drupal\Core\Entity\Entity\EntityViewDisplay;
+use Drupal\Core\Extension\ModuleHandlerTrait;
 use Drupal\Core\Field\FieldItemInterface;
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Language\LanguageManagerInterface;
@@ -17,7 +19,10 @@
  *
  * @ingroup entity_api
  */
-class EntityViewBuilder extends EntityHandlerBase implements EntityHandlerInterface, EntityViewBuilderInterface {
+class EntityViewBuilder implements EntityHandlerInterface, EntityViewBuilderInterface {
+
+  use DependencySerializationTrait;
+  use ModuleHandlerTrait;
 
   /**
    * The type of entities for which this view builder is instantiated.
@@ -84,11 +89,13 @@ public function __construct(EntityTypeInterface $entity_type, EntityManagerInter
    * {@inheritdoc}
    */
   public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
-    return new static(
+    $builder = new static(
       $entity_type,
       $container->get('entity.manager'),
       $container->get('language_manager')
     );
+    $builder->setModuleHandler($container->get('module_handler'));
+    return $builder;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/EntityHandlerBase.php b/core/lib/Drupal/Core/Extension/ModuleHandlerTrait.php
similarity index 50%
copy from core/lib/Drupal/Core/Entity/EntityHandlerBase.php
copy to core/lib/Drupal/Core/Extension/ModuleHandlerTrait.php
index e2b6e1c..dac04a3 100644
--- a/core/lib/Drupal/Core/Entity/EntityHandlerBase.php
+++ b/core/lib/Drupal/Core/Extension/ModuleHandlerTrait.php
@@ -1,24 +1,28 @@
 <?php
 
-namespace Drupal\Core\Entity;
-
-use Drupal\Core\DependencyInjection\DependencySerializationTrait;
-use Drupal\Core\Extension\ModuleHandlerInterface;
-use Drupal\Core\StringTranslation\StringTranslationTrait;
+namespace Drupal\Core\Extension;
 
 /**
- * Provides a base class for entity handlers.
+ * A service strait to allow backwards compatibility for EntityHandlerBase.
+ *
+ * \Drupal\Core\Entity\EntityHandlerBase is deprecated. This trait replaces its
+ * behavior.
+ *
+ * You can use this trait and call setModuleHandler() during
+ * \Drupal\Core\Entity\EntityHandlerInterface::createInstance() in order to
+ * perform IoC injection.
+ *
+ * You can also not use this trait, and perform injection as needed to your own
+ * class.
  *
- * @deprecated in Drupal 8.0.x, will be removed before Drupal 9.0.0.
- *   Implement the container injection pattern of
- *   \Drupal\Core\Entity\EntityHandlerInterface::createInstance() to obtain the
- *   module handler service for your class.
+ * @deprecated in 8.3.x for removal before Drupal 9.0.0 release. Perform your
+ *   own injection of dependencies to entity handlers using
+ *   \Drupal\Core\Entity\EntityHandlerInterface.
  *
- * @ingroup entity_api
+ * @see \Drupal\Core\Entity\EntityHandlerBase
+ * @see \Drupal\Core\Entity\EntityHandlerInterface::createInstance()
  */
-abstract class EntityHandlerBase {
-  use StringTranslationTrait;
-  use DependencySerializationTrait;
+trait ModuleHandlerTrait {
 
   /**
    * The module handler to invoke hooks on.
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php
index f5c1264..6c56e1f 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php
@@ -121,7 +121,8 @@ public function testGetOperations() {
       ->method('urlInfo')
       ->will($this->returnValue($url));
 
-    $list = new EntityListBuilder($this->entityType, $this->roleStorage, $this->moduleHandler);
+    $list = new EntityListBuilder($this->entityType, $this->roleStorage);
+    $list->setModuleHandler($this->moduleHandler);
     $list->setStringTranslation($this->translationManager);
 
     $operations = $list->getOperations($this->role);
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityTypeManagerTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityTypeManagerTest.php
index c2325d4..f21403b 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityTypeManagerTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityTypeManagerTest.php
@@ -18,6 +18,7 @@
 use Drupal\Core\Entity\EntityTypeManager;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\Core\Extension\ModuleHandlerTrait;
 use Drupal\Core\StringTranslation\TranslationInterface;
 use Drupal\Tests\UnitTestCase;
 use Prophecy\Argument;
@@ -411,6 +412,8 @@ public function setDiscovery(DiscoveryInterface $discovery) {
  */
 class TestEntityForm extends EntityHandlerBase {
 
+  use ModuleHandlerTrait;
+
   /**
    * The entity manager.
    *
@@ -507,4 +510,6 @@ public static function create(ContainerInterface $container) {
  */
 class TestRouteProvider extends EntityHandlerBase {
 
+  use ModuleHandlerTrait;
+
 }
