// WingsEmu // // Developed by NosWings Team using System; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using PhoenixLib.ServiceBus.Internal.Routing; using PhoenixLib.ServiceBus.MQTT; using PhoenixLib.ServiceBus.Protocol; using PhoenixLib.ServiceBus.Routing; namespace PhoenixLib.ServiceBus.Extensions { public static class DependencyInjectionExtensions { internal static string ToLowerPure(this string str) { return string.Concat(str.Select(s => !char.IsLetterOrDigit(s) ? '/' : char.IsUpper(s) ? char.ToLower(s) : s)); } public static void AddMqttConfigurationFromEnv(this IServiceCollection services) { services.TryAddSingleton(s => new MqttConfiguration( Environment.GetEnvironmentVariable("MQTT_BROKER_ADDRESS") ?? "localhost", Environment.GetEnvironmentVariable("MQTT_BROKER_CLIENT_NAME") ?? "client-" + Guid.NewGuid(), Convert.ToInt32(Environment.GetEnvironmentVariable("MQTT_BROKER_PORT") ?? "1883") )); } internal static void AddMessageService(this IServiceCollection services) { services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddSingleton(); } internal static MessageTypeAttribute GetMessageAttributes() => typeof(T).GetMessageAttributes(); internal static void RegisterMessage(this IServiceCollection services) where T : IMessage { GetMessageAttributes(); services.AddSingleton>(); } public static void AddMessagePublisher(this IServiceCollection services) where T : IMessage { services.AddMessageService(); // adds the event publisher services.TryAddSingleton, GenericMessagePublisher>(); } public static void AddMessageSubscriber(this IServiceCollection services) where TMessage : class, IMessage where TMessageConsumer : class, IMessageConsumer { services.AddMessageService(); services.RegisterMessage(); // Message -> event pipeline forwarder services.AddSingleton, TMessageConsumer>(); } } }