diff --git a/entity_usage_views_field.module b/entity_usage_views_field.module
index 8870836..193c5eb 100644
--- a/entity_usage_views_field.module
+++ b/entity_usage_views_field.module
@@ -7,6 +7,8 @@
 
 declare(strict_types=1);
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\entity_usage_views_field\Hook\EntityUsageViewsFieldHooks;
 use Drupal\Core\Entity\EntityTypeInterface;
 
 /**
@@ -14,33 +16,8 @@ use Drupal\Core\Entity\EntityTypeInterface;
  *
  * Adds usage field to valid entity usage target entity types.
  */
-function entity_usage_views_field_views_data_alter(array &$data): void {
-  $entityTypeManager = \Drupal::entityTypeManager();
-  $entityTypes = $entityTypeManager->getDefinitions();
-
-  $validTargets = \Drupal::config('entity_usage.settings')
-    ->get('track_enabled_target_entity_types');
-  if ($validTargets) {
-    $entityTypes = array_filter($entityTypes, static fn (EntityTypeInterface $definition): bool => in_array($definition->id(), $validTargets));
-  }
-
-  $entityTypes = array_filter($entityTypes, static fn (EntityTypeInterface $entityType): bool => $entityTypeManager
-    ->hasHandler($entityType->id(), 'views_data'),
-  );
-
-  foreach ($entityTypes as $id => $definition) {
-    /** @var \Drupal\views\EntityViewsDataInterface $viewsHandler */
-    $viewsHandler = $entityTypeManager->getHandler($id, 'views_data');
-    $tableName = $viewsHandler->getViewsTableForEntityType($definition);
-
-    $data[$tableName]['entity_usage_views_field']['field'] = [
-      'id' => 'entity_usage_views_field',
-      'title' => \t('Entity usage count'),
-      'additional fields' => [
-        'id' => [
-          'field' => $definition->getKey('id'),
-        ],
-      ],
-    ];
-  }
+#[LegacyHook]
+function entity_usage_views_field_views_data_alter(array &$data): void
+{
+    \Drupal::service(EntityUsageViewsFieldHooks::class)->viewsDataAlter($data);
 }
diff --git a/entity_usage_views_field.services.yml b/entity_usage_views_field.services.yml
index fc1cdb0..6cf078e 100644
--- a/entity_usage_views_field.services.yml
+++ b/entity_usage_views_field.services.yml
@@ -2,4 +2,7 @@ services:
   entity_usage_views_field.invalidator:
     class: Drupal\entity_usage_views_field\EuvfCacheTagInvalidator
     tags:
-      - { name: cache_tags_invalidator }
\ No newline at end of file
+      - { name: cache_tags_invalidator }
+  Drupal\entity_usage_views_field\Hook\EntityUsageViewsFieldHooks:
+    class: Drupal\entity_usage_views_field\Hook\EntityUsageViewsFieldHooks
+    autowire: true
diff --git a/src/Hook/EntityUsageViewsFieldHooks.php b/src/Hook/EntityUsageViewsFieldHooks.php
new file mode 100644
index 0000000..a5f860c
--- /dev/null
+++ b/src/Hook/EntityUsageViewsFieldHooks.php
@@ -0,0 +1,44 @@
+<?php
+
+namespace Drupal\entity_usage_views_field\Hook;
+
+use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+/**
+ * Hook implementations for entity_usage_views_field.
+ */
+class EntityUsageViewsFieldHooks
+{
+    use StringTranslationTrait;
+    /**
+     * Implements hook_views_data_alter().
+     *
+     * Adds usage field to valid entity usage target entity types.
+     */
+    #[Hook('views_data_alter')]
+    public function viewsDataAlter(array &$data): void
+    {
+        $entityTypeManager = \Drupal::entityTypeManager();
+        $entityTypes = $entityTypeManager->getDefinitions();
+        $validTargets = \Drupal::config('entity_usage.settings')->get('track_enabled_target_entity_types');
+        if ($validTargets) {
+            $entityTypes = array_filter($entityTypes, static fn(\Drupal\Core\Entity\EntityTypeInterface $definition): bool => in_array($definition->id(), $validTargets));
+        }
+        $entityTypes = array_filter($entityTypes, static fn(\Drupal\Core\Entity\EntityTypeInterface $entityType): bool => $entityTypeManager->hasHandler($entityType->id(), 'views_data'));
+        foreach ($entityTypes as $id => $definition) {
+            /** @var \Drupal\views\EntityViewsDataInterface $viewsHandler */
+            $viewsHandler = $entityTypeManager->getHandler($id, 'views_data');
+            $tableName = $viewsHandler->getViewsTableForEntityType($definition);
+            $data[$tableName]['entity_usage_views_field']['field'] = [
+                'id' => 'entity_usage_views_field',
+                'title' => $this->t('Entity usage count'),
+                'additional fields' => [
+                    'id' => [
+                        'field' => $definition->getKey('id'),
+                    ],
+                ],
+            ];
+        }
+    }
+}
