Files
xEventService/DI/XDIHelperExtension.cs
T

96 lines
3.0 KiB
C#

using System;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using xCommons.Extensions;
using xEventService.Configuration;
using xEventService.Constants;
using xEventService.Extensions;
using xEventService.Interfaces;
using xEventService.Providers;
using xExceptions.Constants;
namespace xEventService.DI
{
public static partial class XDIHelperExtension
{
/// <summary>
/// Extract EventService Configurations ...
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
public static XEventServiceConfiguration GetXEventServiceConfiguration(
this IConfiguration source
)
{
//
var configSection = source
.GetSection(ConfigurationNodeNames.EVENT_SERVICE_NODE_NAME);
var result = configSection.Get<XEventServiceConfiguration>();
//
return result;
}
/// <summary>
/// Register Event Service Configurations ...
/// </summary>
/// <param name="services"></param>
/// <param name="configuration"></param>
public static void AddXEventServiceConfiguration(
this IServiceCollection services,
IConfiguration configuration
)
{
//
var config = configuration.GetXEventServiceConfiguration();
services.AddXEventServiceConfiguration(config);
}
/// <summary>
/// Register Event Service Configurations ...
/// </summary>
/// <param name="services"></param>
/// <param name="configuration"></param>
public static void AddXEventServiceConfiguration(
this IServiceCollection services,
XEventServiceConfiguration configuration
)
{
//
// Validate ...
var isValid = configuration.IsValid() &&
(configuration.Broker == XEventBroker.XKafka ||
(configuration.Broker == XEventBroker.XZeroMQ &&
configuration.ZeroMQ.IsValid()) ||
(configuration.Broker == XEventBroker.XRabbitMQ &&
configuration.RabbitMQ.IsValid()));
if (!isValid)
{
//
Log("Registration Failed, due Invalid Configuration ...");
XException.InvalidConfiguration.Throw();
}
//
// Register Configuration as Singleton ...
services.AddSingleton(configuration);
}
//
#region Private ...
/// <summary>
/// a LogTag for Service ...
/// </summary>
private static string XLogTag = XEventServiceConstants.XEventServiceDILogTag;
/// <summary>
/// print a log in Console ...
/// </summary>
/// <param name="message"></param>
private static void Log(string message)
{
Console.WriteLine($"{XLogTag} => {message}");
}
#endregion
}
}