diff --git a/core/lib/Drupal/Core/Render/Element/Link.php b/core/lib/Drupal/Core/Render/Element/Link.php
index 2a06eb6..8459464 100644
--- a/core/lib/Drupal/Core/Render/Element/Link.php
+++ b/core/lib/Drupal/Core/Render/Element/Link.php
@@ -7,21 +7,52 @@
 
 namespace Drupal\Core\Render\Element;
 
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\Core\Utility\LinkGeneratorInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
 /**
  * Provides a link render element.
  *
  * @RenderElement("link")
  */
-class Link extends RenderElement {
+class Link extends RenderElement implements ContainerFactoryPluginInterface {
+
+  /**
+   * @var \Drupal\Core\Utility\LinkGeneratorInterface
+   */
+  protected $linkGenerator;
+
+  /**
+   * @param array $configuration
+   * @param string $plugin_id
+   * @param mixed $plugin_definition
+   * @param \Drupal\Core\Utility\LinkGeneratorInterface $link_generator
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, LinkGeneratorInterface $link_generator) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->linkGenerator = $link_generator;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('link_generator')
+    );
+  }
 
   /**
    * {@inheritdoc}
    */
   public function getInfo() {
-    $class = get_class($this);
     return array(
       '#pre_render' => array(
-        array($class, 'preRenderLink'),
+        array($this, 'preRenderLink'),
       ),
     );
   }
@@ -45,7 +76,7 @@ public function getInfo() {
    * @return array
    *   The passed-in element containing a rendered link in '#markup'.
    */
-  public static function preRenderLink($element) {
+  public function preRenderLink($element) {
     // By default, link options to pass to l() are normally set in #options.
     $element += array('#options' => array());
     // However, within the scope of renderable elements, #attributes is a valid
@@ -83,7 +114,7 @@ public static function preRenderLink($element) {
 
     if (isset($element['#route_name'])) {
       $element['#route_parameters'] = empty($element['#route_parameters']) ? array() : $element['#route_parameters'];
-      $element['#markup'] = \Drupal::linkGenerator()->generate($element['#title'], $element['#route_name'], $element['#route_parameters'], $element['#options']);
+      $element['#markup'] = $this->linkGenerator->generate($element['#title'], $element['#route_name'], $element['#route_parameters'], $element['#options']);
     }
     else {
       $element['#markup'] = l($element['#title'], $element['#href'], $element['#options']);
