diff --git a/app/services/auto_merge_service.rb b/app/services/auto_merge_service.rb
index 0bf0346ed0b1fb21a69cd58b0d24f507c999ac7c..1821eca6cfafb319d0f1c43ce14cf0126a60ec68 100644
--- a/app/services/auto_merge_service.rb
+++ b/app/services/auto_merge_service.rb
@@ -17,13 +17,20 @@ def all_strategies_ordered_by_preference
     def get_service_class(strategy)
       return unless all_strategies_ordered_by_preference.include?(strategy)
 
-      "::AutoMerge::#{strategy.camelize}Service".constantize
+      strategy_to_class_map[strategy]
+    end
+
+    def strategy_to_class_map
+      {
+        STRATEGY_MERGE_WHEN_PIPELINE_SUCCEEDS => AutoMerge::MergeWhenPipelineSucceedsService,
+        STRATEGY_MERGE_WHEN_CHECKS_PASS => AutoMerge::MergeWhenChecksPassService
+      }
     end
   end
 
   def execute(merge_request, strategy = nil)
     strategy ||= preferred_strategy(merge_request)
-    service = get_service_instance(merge_request, strategy)
+    service = auto_merge_service_instance(merge_request, strategy)
 
     return :failed unless service&.available_for?(merge_request)
 
@@ -34,33 +41,33 @@ def update(merge_request)
     return :failed unless merge_request.auto_merge_enabled?
 
     strategy = merge_request.auto_merge_strategy
-    get_service_instance(merge_request, strategy).update(merge_request)
+    auto_merge_service_instance(merge_request, strategy).update(merge_request)
   end
 
   def process(merge_request)
     return unless merge_request.auto_merge_enabled?
 
     strategy = merge_request.auto_merge_strategy
-    get_service_instance(merge_request, strategy).process(merge_request)
+    auto_merge_service_instance(merge_request, strategy).process(merge_request)
   end
 
   def cancel(merge_request)
     return error("Can't cancel the automatic merge", 406) unless merge_request.auto_merge_enabled?
 
     strategy = merge_request.auto_merge_strategy
-    get_service_instance(merge_request, strategy).cancel(merge_request)
+    auto_merge_service_instance(merge_request, strategy).cancel(merge_request)
   end
 
   def abort(merge_request, reason)
     return error("Can't abort the automatic merge", 406) unless merge_request.auto_merge_enabled?
 
     strategy = merge_request.auto_merge_strategy
-    get_service_instance(merge_request, strategy).abort(merge_request, reason)
+    auto_merge_service_instance(merge_request, strategy).abort(merge_request, reason)
   end
 
   def available_strategies(merge_request)
     self.class.all_strategies_ordered_by_preference.select do |strategy|
-      get_service_instance(merge_request, strategy).available_for?(merge_request)
+      auto_merge_service_instance(merge_request, strategy).available_for?(merge_request)
     end
   end
 
@@ -70,8 +77,8 @@ def preferred_strategy(merge_request)
 
   private
 
-  def get_service_instance(merge_request, strategy)
-    strong_memoize("service_instance_#{merge_request.id}_#{strategy}") do
+  def auto_merge_service_instance(merge_request, strategy)
+    strong_memoize_with(:auto_merge_service_instance, merge_request, strategy) do
       self.class.get_service_class(strategy)&.new(project, current_user, params)
     end
   end
diff --git a/ee/app/services/auto_merge/merge_train_service.rb b/ee/app/services/auto_merge/merge_train_service.rb
index 9d2ad489043d3a2ce7dabbcdd8f683a0122c3a90..ceabebaf252da14b7c3778160dcddb93ac18ba75 100644
--- a/ee/app/services/auto_merge/merge_train_service.rb
+++ b/ee/app/services/auto_merge/merge_train_service.rb
@@ -1,9 +1,5 @@
 # frozen_string_literal: true
 
-#
-# Note: This service is called via metaprogramming in AutoMergeService
-# which is triggered by the AutoMergeProcessWorker when a pipeline completes
-#
 module AutoMerge
   class MergeTrainService < AutoMerge::BaseService
     extend Gitlab::Utils::Override
diff --git a/ee/app/services/ee/auto_merge_service.rb b/ee/app/services/ee/auto_merge_service.rb
index dd69024b3c649bf346a2b32d51543b16120fd2ac..7e1ce0dfb7510309038f90ad49d23378ca067a26 100644
--- a/ee/app/services/ee/auto_merge_service.rb
+++ b/ee/app/services/ee/auto_merge_service.rb
@@ -13,6 +13,13 @@ module AutoMergeService
       ::AutoMergeService::STRATEGY_ADD_TO_MERGE_TRAIN_WHEN_CHECKS_PASS
     ].freeze
 
+    EE_STRATEGY_TO_CLASS_MAP = {
+      STRATEGY_MERGE_TRAIN => AutoMerge::MergeTrainService,
+      STRATEGY_ADD_TO_MERGE_TRAIN_WHEN_PIPELINE_SUCCEEDS => AutoMerge::AddToMergeTrainWhenPipelineSucceedsService,
+      ::AutoMergeService::STRATEGY_ADD_TO_MERGE_TRAIN_WHEN_CHECKS_PASS =>
+        AutoMerge::AddToMergeTrainWhenChecksPassService
+    }.freeze
+
     class_methods do
       extend ::Gitlab::Utils::Override
       include ::Gitlab::Utils::StrongMemoize
@@ -23,6 +30,12 @@ def all_strategies_ordered_by_preference
           EE_STRATEGIES + super
         end
       end
+
+      private
+
+      def strategy_to_class_map
+        super.merge(EE_STRATEGY_TO_CLASS_MAP)
+      end
     end
   end
 end