Drupal 8 dependency injection in custom class

Inject a service in custom class:
with DI for renderer

<?php
 
namespace Drupal\mh_fs\Controller;
 
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Render\Renderer;
use Symfony\Component\HttpFoundation\Response;
 
/**
 * Class HotelRenderedController.
 */
class HotelRenderedController implements ContainerInjectionInterface {
 
  protected $renderer;
 
  public function __construct( Renderer $renderer) {
    $this->renderer = $renderer;
  }
 
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('renderer')
    );
  }
 
  /**
   * Content.
   *
   * @param null $nid
   *
   * @return string
   *   Return Hotel rendered as string.
   * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
   * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
   */
  public function content($nid = NULL) {
    $output = '';
 
    if ($nid) {
      $view_mode = 'full';
      $view_builder = \Drupal::entityTypeManager()->getViewBuilder('node');
      $storage = \Drupal::entityTypeManager()->getStorage('node');
      $node = $storage->load($nid);
      $build = $view_builder->view($node, $view_mode);
      $output = $this->renderer->render($build);
    }
 
    return new Response($output);
  }
 
}

with DI for entity_type.manager service

<?php
 
namespace Drupal\mh_fs\Controller;
 
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Render\Renderer;
use Drupal\Core\Entity\EntityTypeManager;
use Symfony\Component\HttpFoundation\Response;
 
/**
 * Class HotelRenderedController.
 */
class HotelRenderedController implements ContainerInjectionInterface {
 
  protected $renderer;
 
  protected $entityTypeManager;
 
  public function __construct( Renderer $renderer, EntityTypeManager $entity_type_manager) {
    $this->renderer = $renderer;
    $this->entityTypeManager = $entity_type_manager;
  }
 
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('renderer'),
      $container->get('entity_type.manager')
    );
  }
 
  /**
   * Content.
   *
   * @param null $nid
   *
   * @return string
   *   Return Hotel rendered as string.
   * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
   * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
   */
  public function content($nid = NULL) {
    $output = '';
 
    if ($nid) {
      $view_mode = 'full';
      //$view_builder = \Drupal::entityTypeManager()->getViewBuilder('node');
      $view_builder = $this->entityTypeManager->getViewBuilder('node');
      //$storage = \Drupal::entityTypeManager()->getStorage('node');
      $storage = $this->entityTypeManager->getStorage('node');
      $node = $storage->load($nid);
      $build = $view_builder->view($node, $view_mode);
      $output = $this->renderer->render($build);
    }
 
    return new Response($output);
  }
 
}
Category: