diff --git a/core/lib/Drupal/Core/TypedData/TypedDataManager.php b/core/lib/Drupal/Core/TypedData/TypedDataManager.php
index d42a3d2..f760ddc 100644
--- a/core/lib/Drupal/Core/TypedData/TypedDataManager.php
+++ b/core/lib/Drupal/Core/TypedData/TypedDataManager.php
@@ -14,6 +14,7 @@
 use Drupal\Core\Plugin\DefaultPluginManager;
 use Drupal\Core\TypedData\Validation\MetadataFactory;
 use Drupal\Core\Validation\ConstraintManager;
+use Drupal\Core\Validation\ConstraintValidatorFactory;
 use Drupal\Core\Validation\DrupalTranslator;
 use Symfony\Component\Validator\Validation;
 use Symfony\Component\Validator\Validator\ValidatorInterface;
@@ -322,6 +323,7 @@ public function getValidator() {
       $this->validator = Validation::createValidatorBuilder()
         ->setMetadataFactory(new MetadataFactory())
         ->setTranslator(new DrupalTranslator())
+        ->setConstraintValidatorFactory(new ConstraintValidatorFactory())
         ->setApiVersion(Validation::API_VERSION_2_4)
         ->getValidator();
     }
diff --git a/core/lib/Drupal/Core/Validation/ConstraintValidatorFactory.php b/core/lib/Drupal/Core/Validation/ConstraintValidatorFactory.php
new file mode 100644
index 0000000..f556348
--- /dev/null
+++ b/core/lib/Drupal/Core/Validation/ConstraintValidatorFactory.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Validation\ConstraintValidatorFactory.
+ */
+
+namespace Drupal\Core\Validation;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Constraints\ExpressionValidator;
+use Symfony\Component\Validator\ConstraintValidatorFactory as BaseConstraintValidatorFactory;
+
+/**
+ * Defines a constraint validator factory that works with container injection.
+ */
+class ConstraintValidatorFactory extends BaseConstraintValidatorFactory {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $propertyAccessor;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getInstance(Constraint $constraint) {
+    $class_name = $constraint->validatedBy();
+
+    if (!isset($this->validators[$class_name])) {
+      // If the plugin provides a factory method, pass the container to it.
+      if (is_subclass_of($class_name, 'Drupal\Core\Plugin\ContainerFactoryPluginInterface')) {
+        $this->validators[$class_name] = $class_name::create(\Drupal::getContainer(), [], NULL, []);
+      }
+      else {
+        $this->validators[$class_name] = 'validator.expression' === $class_name ? new ExpressionValidator($this->propertyAccessor) : new $class_name();
+      }
+    }
+
+    return $this->validators[$class_name];
+  }
+}
diff --git a/core/modules/comment/src/Plugin/Validation/Constraint/CommentNameConstraintValidator.php b/core/modules/comment/src/Plugin/Validation/Constraint/CommentNameConstraintValidator.php
index e47c371..cff2507 100644
--- a/core/modules/comment/src/Plugin/Validation/Constraint/CommentNameConstraintValidator.php
+++ b/core/modules/comment/src/Plugin/Validation/Constraint/CommentNameConstraintValidator.php
@@ -7,13 +7,40 @@
 
 namespace Drupal\comment\Plugin\Validation\Constraint;
 
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\user\UserStorageInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 
 /**
  * Validates the CommentName constraint.
  */
-class CommentNameConstraintValidator extends ConstraintValidator {
+class CommentNameConstraintValidator extends ConstraintValidator implements ContainerFactoryPluginInterface {
+
+  /**
+   * User storage handler.
+   *
+   * @var \Drupal\user\UserStorageInterface
+   */
+  protected $userStorage;
+
+  /**
+   * Constructs a new CommentNameConstraintValidator.
+   *
+   * @param \Drupal\user\UserStorageInterface $user_storage
+   *   The user storage handler.
+   */
+  public function __construct(UserStorageInterface $user_storage) {
+    $this->userStorage = $user_storage;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static($container->get('entity.manager')->getStorage('user'));
+  }
 
   /**
    * {@inheritdoc}
@@ -24,8 +51,7 @@ public function validate($items, Constraint $constraint) {
       // Do not allow unauthenticated comment authors to use a name that is
       // taken by a registered user.
       if ($items->getEntity()->getOwnerId() === 0) {
-        // @todo Properly inject dependency https://drupal.org/node/2197029
-        $users = \Drupal::entityManager()->getStorage('user')->loadByProperties(array('name' => $author_name));
+        $users = $this->userStorage->loadByProperties(array('name' => $author_name));
         if (!empty($users)) {
           $this->context->addViolation($constraint->message, array('%name' => $author_name));
         }
