diff --git a/core/modules/serialization/serialization.services.yml b/core/modules/serialization/serialization.services.yml
index bc491e6bd1a111a430d80642f936ebb7086d97c9..389ac0564c679c3acc1f4d17e73908bd7f7c4288 100644
--- a/core/modules/serialization/serialization.services.yml
+++ b/core/modules/serialization/serialization.services.yml
@@ -34,7 +34,6 @@ services:
       - { name: encoder, format: xml }
   serializer.entity_resolver:
     class: Drupal\serialization\EntityResolver\ChainEntityResolver
-    arguments: [{  }]
   serializer.entity_resolver.uuid:
     class: Drupal\serialization\EntityResolver\UuidResolver
     tags:
diff --git a/core/modules/serialization/src/EntityResolver/ChainEntityResolver.php b/core/modules/serialization/src/EntityResolver/ChainEntityResolver.php
index 8127c7931e8aa4faf9b1ad3eba6570760e3d0b07..e1291c1d286cd4fa6f5e6d22520cadf86cc1419b 100644
--- a/core/modules/serialization/src/EntityResolver/ChainEntityResolver.php
+++ b/core/modules/serialization/src/EntityResolver/ChainEntityResolver.php
@@ -12,14 +12,14 @@
 /**
  * Resolver delegating the entity resolution to a chain of resolvers.
  */
-class ChainEntityResolver implements EntityResolverInterface {
+class ChainEntityResolver implements ChainEntityResolverInterface {
 
   /**
    * The concrete resolvers.
    *
    * @var \Drupal\serialization\EntityResolver\EntityResolverInterface[]
    */
-  protected $resolvers;
+  protected $resolvers = array();
 
   /**
    * Constructs a ChainEntityResolver object.
@@ -31,6 +31,13 @@ public function __construct(array $resolvers = array()) {
     $this->resolvers = $resolvers;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function addResolver(EntityResolverInterface $resolver) {
+    $this->resolvers[] = $resolver;
+  }
+
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/serialization/src/EntityResolver/ChainEntityResolverInterface.php b/core/modules/serialization/src/EntityResolver/ChainEntityResolverInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..16dcfc05b4e8e32e8e3f3fc6d100f119cf8f187e
--- /dev/null
+++ b/core/modules/serialization/src/EntityResolver/ChainEntityResolverInterface.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\serialization\EntityResolver\ChainEntityResolverInterface
+ */
+
+namespace Drupal\serialization\EntityResolver;
+
+/**
+ * An interface for delegating a entity resolution to a chain of resolvers.
+ */
+interface ChainEntityResolverInterface extends EntityResolverInterface {
+
+  /**
+   * Adds an entity resolver.
+   *
+   * @param \Drupal\serialization\EntityResolver\EntityResolverInterface $resolver
+   *   The entity resolver to add.
+   */
+  public function addResolver(EntityResolverInterface $resolver);
+
+}
diff --git a/core/modules/serialization/src/RegisterEntityResolversCompilerPass.php b/core/modules/serialization/src/RegisterEntityResolversCompilerPass.php
index 6399f500b0d3a81e3bcb69ad8842649fa61d8c03..60e45ebb4e2efd3ed2d9dd5efb60a2ed675fc373 100644
--- a/core/modules/serialization/src/RegisterEntityResolversCompilerPass.php
+++ b/core/modules/serialization/src/RegisterEntityResolversCompilerPass.php
@@ -24,6 +24,7 @@ class RegisterEntityResolversCompilerPass implements CompilerPassInterface {
    */
   public function process(ContainerBuilder $container) {
     $definition = $container->getDefinition('serializer.entity_resolver');
+    $resolvers = array();
 
     // Retrieve registered Normalizers and Encoders from the container.
     foreach ($container->findTaggedServiceIds('entity_resolver') as $id => $attributes) {
@@ -32,8 +33,8 @@ public function process(ContainerBuilder $container) {
     }
 
     // Add the registered concrete EntityResolvers to the ChainEntityResolver.
-    if (!empty($resolvers)) {
-      $definition->replaceArgument(0, $this->sort($resolvers));
+    foreach ($this->sort($resolvers) as $resolver) {
+      $definition->addMethodCall('addResolver', array($resolver));
     }
   }
 
diff --git a/core/modules/serialization/tests/src/EntityResolver/ChainEntityResolverTest.php b/core/modules/serialization/tests/src/EntityResolver/ChainEntityResolverTest.php
index 0f05311fc567952ea18cfb8a5cd3c4605dd3f636..5adac69a347c14c18c1102eb2cd6b4a07874a642 100644
--- a/core/modules/serialization/tests/src/EntityResolver/ChainEntityResolverTest.php
+++ b/core/modules/serialization/tests/src/EntityResolver/ChainEntityResolverTest.php
@@ -47,6 +47,9 @@ public function setUp() {
 
   /**
    * Test the resolve method with no matching resolvers.
+   *
+   * @covers ::__construct
+   * @covers ::resolve
    */
   public function testResolverWithNoneResolved() {
     $resolvers = array(
@@ -59,8 +62,25 @@ public function testResolverWithNoneResolved() {
     $this->assertNull($resolver->resolve($this->testNormalizer, $this->testData, $this->testEntityType));
   }
 
+  /**
+   * Test the resolve method with no matching resolvers, using addResolver.
+   *
+   * @covers ::addResolver
+   * @covers ::resolve
+   */
+  public function testResolverWithNoneResolvedUsingAddResolver() {
+    $resolver = new ChainEntityResolver();
+    $resolver->addResolver($this->createEntityResolverMock());
+    $resolver->addResolver($this->createEntityResolverMock());
+
+    $this->assertNull($resolver->resolve($this->testNormalizer, $this->testData, $this->testEntityType));
+  }
+
   /**
    * Test the resolve method with a matching resolver first.
+   *
+   * @covers ::__construct
+   * @covers ::resolve
    */
   public function testResolverWithFirstResolved() {
     $resolvers = array(
@@ -75,6 +95,9 @@ public function testResolverWithFirstResolved() {
 
   /**
    * Test the resolve method with a matching resolver last.
+   *
+   * @covers ::__construct
+   * @covers ::resolve
    */
   public function testResolverWithLastResolved() {
     $resolvers = array(
@@ -97,7 +120,7 @@ public function testResolverWithLastResolved() {
    *   Whether or not the resolve method is expected to be called.
    *
    * @return \Drupal\serialization\EntityResolver\EntityResolverInterface|\PHPUnit_Framework_MockObject_MockObject
-   *   The mocked entity ressolver.
+   *   The mocked entity resolver.
    */
   protected function createEntityResolverMock($return = NULL, $called = TRUE) {
     $mock = $this->getMock('Drupal\serialization\EntityResolver\EntityResolverInterface');