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()); }