diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc
index 676a948..fb399e4 100644
--- a/core/includes/bootstrap.inc
+++ b/core/includes/bootstrap.inc
@@ -2516,6 +2516,21 @@ function module_implements($hook) {
 }
 
 /**
+ * Invokes a hook in a particular module.
+ *
+ * @deprecated as of Drupal 8.0. Use
+ *   drupal_container()->get('module_handler')->invoke($module, $hook, $args = array()).
+ *
+ * @see \Drupal\Core\Extension\ModuleHandler::invoke()
+ */
+function module_invoke($module, $hook) {
+  $args = func_get_args();
+  // Remove $module and $hook from the arguments.
+  unset($args[0], $args[1]);
+  return drupal_container()->get('module_handler')->invoke($module, $hook, $args);
+}
+
+/**
  * Invokes a hook in all enabled modules that implement it.
  *
  * @deprecated as of Drupal 8.0. Use
diff --git a/core/includes/module.inc b/core/includes/module.inc
index 83a3ba6..d99b39d 100644
--- a/core/includes/module.inc
+++ b/core/includes/module.inc
@@ -623,31 +623,7 @@ function module_uninstall($module_list = array(), $uninstall_dependents = TRUE)
  * are executed when running Drupal.
  *
  * See also @link themeable the themeable group page. @endlink
- */
-
-/**
- * Invokes a hook in a particular module.
- *
- * @param $module
- *   The name of the module (without the .module extension).
- * @param $hook
- *   The name of the hook to invoke.
- * @param ...
- *   Arguments to pass to the hook implementation.
  *
- * @return
- *   The return value of the hook implementation.
- */
-function module_invoke($module, $hook) {
-  $args = func_get_args();
-  // Remove $module and $hook from the arguments.
-  unset($args[0], $args[1]);
-  if (module_hook($module, $hook)) {
-    return call_user_func_array($module . '_' . $hook, $args);
-  }
-}
-
-/**
  * @} End of "defgroup hooks".
  */
 
diff --git a/core/lib/Drupal/Core/Extension/ModuleHandler.php b/core/lib/Drupal/Core/Extension/ModuleHandler.php
index 8e1cdb6..14b4e72 100644
--- a/core/lib/Drupal/Core/Extension/ModuleHandler.php
+++ b/core/lib/Drupal/Core/Extension/ModuleHandler.php
@@ -259,6 +259,17 @@ public function implementsHook($module, $hook) {
   }
 
   /**
+   * Implements \Drupal\Core\Extension\ModuleHandlerInterface::invoke().
+   */
+  public function invoke($module, $hook, $args = array()) {
+    if (!$this->implementsHook($module, $hook)) {
+      return;
+    }
+    $function = $module . '_' . $hook;
+    return call_user_func_array($function, $args);
+  }
+
+  /**
    * Implements \Drupal\Core\Extension\ModuleHandlerInterface::invokeAll().
    */
   public function invokeAll($hook, $args = array()) {
diff --git a/core/lib/Drupal/Core/Extension/ModuleHandlerInterface.php b/core/lib/Drupal/Core/Extension/ModuleHandlerInterface.php
index 7cb8418..4fb9c8c 100644
--- a/core/lib/Drupal/Core/Extension/ModuleHandlerInterface.php
+++ b/core/lib/Drupal/Core/Extension/ModuleHandlerInterface.php
@@ -171,6 +171,21 @@ public function resetImplementations();
   public function implementsHook($module, $hook);
 
   /**
+   * Invokes a hook in a particular module.
+   *
+   * @param string $module
+   *   The name of the module (without the .module extension).
+   * @param string $hook
+   *   The name of the hook to invoke.
+   * @param ...
+   *   Arguments to pass to the hook implementation.
+   *
+   * @return mixed
+   *   The return value of the hook implementation.
+   */
+  public function invoke($module, $hook, $args = array());
+
+  /**
    * Invokes a hook in all enabled modules that implement it.
    *
    * @param string $hook
