diff --git a/core/core.services.yml b/core/core.services.yml
index 03d9ffe..cd53490 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -484,6 +484,7 @@ services:
   typed_data_manager:
     class: Drupal\Core\TypedData\TypedDataManager
     parent: default_plugin_manager
+    arguments: ['@container.namespaces', '@cache.discovery', '@module_handler', '@class_resolver']
     calls:
       - [setValidationConstraintManager, ['@validation.constraint']]
     tags:
diff --git a/core/lib/Drupal/Core/TypedData/TypedDataManager.php b/core/lib/Drupal/Core/TypedData/TypedDataManager.php
index d42a3d2..955be72 100644
--- a/core/lib/Drupal/Core/TypedData/TypedDataManager.php
+++ b/core/lib/Drupal/Core/TypedData/TypedDataManager.php
@@ -10,10 +10,12 @@
 use Drupal\Component\Plugin\Exception\PluginException;
 use Drupal\Component\Utility\String;
 use Drupal\Core\Cache\CacheBackendInterface;
+use Drupal\Core\DependencyInjection\ClassResolverInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 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;
@@ -44,20 +46,30 @@ class TypedDataManager extends DefaultPluginManager {
    */
   protected $prototypes = array();
 
- /**
-  * Constructs a new TypedDataManager.
-  *
-  * @param \Traversable $namespaces
-  *   An object that implements \Traversable which contains the root paths
-  *   keyed by the corresponding namespace to look for plugin implementations.
-  * @param \Drupal\Core\Cache\CacheBackendInterface $cache_backend
-  *   Cache backend instance to use.
-  * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
-  *   The module handler.
-  */
-  public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) {
+  /**
+   * The class resolver.
+   *
+   * @var \Drupal\Core\DependencyInjection\ClassResolverInterface
+   */
+  protected $classResolver;
+
+  /**
+   * Constructs a new TypedDataManager.
+   *
+   * @param \Traversable $namespaces
+   *   An object that implements \Traversable which contains the root paths
+   *   keyed by the corresponding namespace to look for plugin implementations.
+   * @param \Drupal\Core\Cache\CacheBackendInterface $cache_backend
+   *   Cache backend instance to use.
+   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   The module handler.
+   * @param \Drupal\Core\DependencyInjection\ClassResolverInterface $class_resolver
+   *   The class resolver.
+   */
+  public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler, ClassResolverInterface $class_resolver) {
     $this->alterInfo('data_type_info');
     $this->setCacheBackend($cache_backend, 'typed_data_types_plugins');
+    $this->classResolver = $class_resolver;
 
     parent::__construct('Plugin/DataType', $namespaces, $module_handler, NULL, 'Drupal\Core\TypedData\Annotation\DataType');
   }
@@ -322,6 +334,7 @@ public function getValidator() {
       $this->validator = Validation::createValidatorBuilder()
         ->setMetadataFactory(new MetadataFactory())
         ->setTranslator(new DrupalTranslator())
+        ->setConstraintValidatorFactory(new ConstraintValidatorFactory($this->classResolver))
         ->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..b9d9f94
--- /dev/null
+++ b/core/lib/Drupal/Core/Validation/ConstraintValidatorFactory.php
@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Validation\ConstraintValidatorFactory.
+ */
+
+namespace Drupal\Core\Validation;
+
+use Drupal\Core\DependencyInjection\ClassResolverInterface;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidatorFactory as BaseConstraintValidatorFactory;
+
+/**
+ * Defines a constraint validator factory that works with container injection.
+ */
+class ConstraintValidatorFactory extends BaseConstraintValidatorFactory {
+
+  /**
+   * Constructs a new ConstraintValidatorFactory.
+   *
+   * @param \Drupal\Core\DependencyInjection\ClassResolverInterface $class_resolver
+   */
+  public function __construct(ClassResolverInterface $class_resolver) {
+    $this->classResolver = $class_resolver;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getInstance(Constraint $constraint) {
+    $class_name = $constraint->validatedBy();
+
+    if (!isset($this->validators[$class_name])) {
+      $this->validators[$class_name] = $this->classResolver->getInstanceFromDefinition($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));
         }
