diff --git a/core/modules/serialization/serialization.services.yml b/core/modules/serialization/serialization.services.yml
index bc491e6..389ac05 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 8127c79..e1291c1 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.
@@ -34,6 +34,13 @@ public function __construct(array $resolvers = array()) {
   /**
    * {@inheritdoc}
    */
+  public function addResolver(EntityResolverInterface $resolver) {
+    $this->resolvers[] = $resolver;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function resolve(NormalizerInterface $normalizer, $data, $entity_type) {
     foreach ($this->resolvers as $resolver) {
       if ($resolved = $resolver->resolve($normalizer, $data, $entity_type)) {
diff --git a/core/modules/serialization/src/EntityResolver/ChainEntityResolverInterface.php b/core/modules/serialization/src/EntityResolver/ChainEntityResolverInterface.php
new file mode 100644
index 0000000..16dcfc0
--- /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 6399f50..60e45eb 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 0f05311..5adac69 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(
@@ -60,7 +63,24 @@ public function testResolverWithNoneResolved() {
   }
 
   /**
+   * 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');
