using System; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using xCommons.Extensions; using xEventService.Configuration; using xEventService.Constants; using xEventService.Interfaces; using xEventService.Models; using xEventService.Providers; namespace xEventService.DI { public static partial class XDIHelperExtension { /// /// Extract EventService Configurations ... /// /// /// public static XEventServiceConfiguration GetXEventServiceConfigurations (this IConfiguration source) { // var configSection = source .GetSection (ConfigurationNodeNames.EVENT_SERVICE_NODE_NAME); var result = configSection.Get (); // return result; } /// /// Register Event Service Configurations ... /// /// /// public static void AddXEventServiceConfigurations ( this IServiceCollection services, IConfiguration configuration ) { // var config = configuration.GetXEventServiceConfigurations (); services.AddXEventServiceConfigurations (config); } /// /// Register Event Service Configurations ... /// /// /// public static void AddXEventServiceConfigurations ( this IServiceCollection services, XEventServiceConfiguration configuration ) { // services.AddSingleton (configuration); } /// /// Register Event Service ... /// /// /// public static void AddXEventService ( this IServiceCollection services, IConfiguration configuration ) { // // Check Configuration Registered ... var config = services.GetRegisteredService (); if (config.IsNull ()) { // Console.WriteLine ($"XEventService: there is no provided XEventServiceConfiguration, using default ..."); // // Register Default Configuration ... services.AddXEventServiceConfigurations (configuration); } // // Register IXEventBus ... var serviceBas = services.GetRegisteredService (); if (serviceBas.IsNull ()) { services.AddSingleton (); } } /// /// Register an Event Handler ... /// /// /// /// /// /// public static void AddXEventHandler ( this IServiceCollection services, ServiceLifetime lifetime = ServiceLifetime.Transient ) where TEvent : XEvent where THandler : IXEventHandler { // services.Add (new ServiceDescriptor ( serviceType: typeof (THandler), implementationType: typeof (THandler), lifetime: lifetime )); // services.Add (new ServiceDescriptor ( serviceType: typeof (IXEventHandler), implementationType: typeof (THandler), lifetime: lifetime )); } /// /// Subscribe to specific Event ... /// /// /// /// /// public static void XEventSubscribe ( this IApplicationBuilder app, bool toExchange = true ) where TEvent : XEvent where THandler : IXEventHandler { // var eventName = typeof (TEvent).Name; // // Retrieve EventBus from IOC ... var eventBus = app.ApplicationServices.GetRequiredService (); // // Subscribe to Event Handler ... var isSubscribed = eventBus.Subscribe (); Console.WriteLine ($"XEventService: Event Handler subscription result: {eventName} => {isSubscribed} ..."); } } }