using Elsa.Features.Services;
using Elsa.MassTransit.Features;
using MassTransit;
// ReSharper disable once CheckNamespace
namespace Elsa.Extensions;
///
/// Provides extensions to that enables and configures MassTransit.
///
public static class MassTransitFeatureExtensions
{
private static readonly object ServiceBusConsumerTypesKey = new();
///
/// Registers the specified type for MassTransit service bus consumer discovery.
///
public static MassTransitFeature AddConsumer(this MassTransitFeature feature) where T : IConsumer => feature.AddConsumer(typeof(T));
///
/// Registers the specified type for MassTransit service bus consumer discovery.
///
public static MassTransitFeature AddConsumer(this MassTransitFeature feature, Type type)
{
var types = feature.Module.Properties.GetOrAdd(ServiceBusConsumerTypesKey, () => new HashSet());
types.Add(type);
return feature;
}
///
/// Returns all collected types for discovery of service bus consumers.
///
internal static IEnumerable GetConsumers(this MassTransitFeature feature) => feature.Module.Properties.GetOrAdd(ServiceBusConsumerTypesKey, () => new HashSet());
}