using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using xCommons.Extensions;
using xMessageService.DI;
using xServices.Configurations;
using xServices.Constants;
using xStorageService.DI;
namespace xServices.DI
{
public static partial class XDIHelperExtension
{
///
/// Retrive Services Configurations ...
///
///
///
public static XServicesConfiguration GetXServicesConfiguration(
this IConfiguration source
)
{
//
var xConfig = source
.GetSection(ConfigurationNodeNames.SERVICES_NODE);
var result = xConfig.Get();
//
return result;
}
///
/// Register Service Configuration ...
///
///
///
public static void AddXServicesConfiguration(
this IServiceCollection services,
IConfiguration configuration
)
{
//
var config = configuration
.GetXServicesConfiguration();
if (config.IsNull())
{
config = new XServicesConfiguration();
}
//
services.AddSingleton(config);
}
///
/// Register Service Configuration ...
///
///
///
public static void AddXServicesConfiguration(
this IServiceCollection services,
XServicesConfiguration configuration
)
{
//
if (configuration.IsNull())
{
configuration = new XServicesConfiguration();
}
//
services.AddSingleton(configuration);
}
///
/// Register Services ...
///
///
///
public static void AddXServices(
this IServiceCollection services,
IConfiguration configuration,
ServiceLifetime lifeTime = ServiceLifetime.Transient
)
{
//
var config = configuration.GetXServicesConfiguration();
//
AddServices(
config: config,
services: services,
lifeTime: lifeTime,
configuration: configuration
);
}
///
/// Register Services ...
///
///
///
///
public static void AddXServices(
this IServiceCollection services,
IConfiguration configuration,
XServicesConfiguration config,
ServiceLifetime lifeTime = ServiceLifetime.Transient
)
{
//
AddServices(
config: config,
services: services,
lifeTime: lifeTime,
configuration: configuration
);
}
///
/// Use All Required Middlewares ...
///
///
public static void UseXServices(this IApplicationBuilder app)
{
//
// Use Storage Service ...
app.UseXStorageService();
}
//
#region Private ...
///
/// Register Required Services ...
///
///
///
///
private static void AddServices(
this IServiceCollection services,
IConfiguration configuration,
XServicesConfiguration config = null,
ServiceLifetime lifeTime = ServiceLifetime.Transient
)
{
//
// Check config ...
if (config.IsNull())
{
config = new XServicesConfiguration();
}
//
// Storage Service ...
services.AddXStorageService(configuration);
//
// Message Service ...
services.AddXMessageService(config: configuration);
}
#endregion
}
}