コントローラでは、サービスコンテナを使用してサービスを注入します。例ModuleHandler:
namespace Drupal\mymodule\Controller;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
class MyController extends ControllerBase {
  /**
   * The module handler service.
   *
   * @var \Drupal\Core\Extension\ModuleHandlerInterface
   */
  protected $moduleHandler;
  /**
   * Constructs a MyController object
   *
   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
   *   The module handler service.
   */
  public function __construct(ModuleHandlerInterface $module_handler) {
    $this->moduleHandler = $module_handler;
  }
  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('module_handler')
    );  
  }
その後\Drupal、挿入されたサービスを使用して呼び出しを回避できます。
$this->moduleHandler->alter('mymodule_myfunction', $plugin_items);
任意のサービス、core / contribからの既存のサービス、または*.services.ymlファイルのカスタムコードで定義したサービスを注入できます。
コアサービス名を見つけるには、通常core.services.yml、IDEでdrupalプロジェクトに取り組んでいる最も簡単な方法であるため、を調べます。
Drupalコンソールを使用して、コアからだけでなく、すべてのサービスを一覧表示できます。
drupal debug:container
Develモジュールを使用して、名前を検索することもできます。
/devel/container/service
               
              
create親メソッドをオーバーロードします-ここで、必要なサービスを注入できます。コンストラクターは、それらをクラスのインスタンス変数に割り当てることができるので、使用できます$this->fooInjectedClass->methodName()