public interface IPaymentService
{
    string Payment(string type);
}

public class PaypalPaymentService : IPaymentService
{
    public string Payment(string type) => $"[Paypal]";
}

public class CreditCartPaymentService : IPaymentService
{
    public string Payment(string type) => $"[CreditCart]";
}

public class TrasnferPaymentService : IPaymentService
{
    public string Payment(string type) => $"[Trasnfer]";
}

Su uso sin keyed Services:

// Registar todos los servicios
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<IPaymentService, PaypalPaymentService>();
builder.Services.AddSingleton<IPaymentService, CreditCartPaymentService>();
builder.Services.AddSingleton<IPaymentService, TrasnferPaymentService>();
// Obtener todos los servicios
public class PaymentService(IEnumerable<IPaymentService> services)
{
  //Tu código  
}
// Si haces esto solo obtienes el último servicio registrado
public class PaymentService(IPaymentService service)
{
  //Tu código  
}

No esiste una forma sencilla de recuperar los servicios, casi siempre he utilizado este pequeño truco: registrar el servicio como un tipo concreto y delegar el registro de IPaymentService.

Pero ahora es más sencillo, usando keyed services:

// Registar todos los servicios

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<IPaymentService, PaypalPaymentService>("paypal");
builder.Services.AddSingleton<IPaymentService, CreditCartPaymentService>("creditcard");
builder.Services.AddSingleton<IPaymentService, TrasnferPaymentService>("trasnfer");

// Uso 
class PaypalPaymentService([FromKeyedServices("paypal")] IPaymentService paymentServices)
{
  //Tu código
}

class CreditCartPaymentService(IKeyedServiceProvider keyedServiceProvider)
{
  var paymentService = keyedServiceProvider.GetRequiredKeyedService<IPayentService>("creditcard");
  //Tu código
}