using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using RobotNet10.CustomConfiguration.Services;
using RobotNet10.StorageManager;
namespace RobotNet10.CustomConfiguration.Extensions;
///
/// Extension methods cho dependency injection
///
public static class ServiceCollectionExtensions
{
///
/// Đăng ký các services cho CustomConfiguration
/// StorageConfig sẽ được inject từ project sử dụng thư viện này
///
public static IServiceCollection AddCustomConfiguration(
this IServiceCollection services,
StorageConfig storageConfig)
{
ArgumentNullException.ThrowIfNull(storageConfig);
// Register StorageConfig as named options (matching ConfigService constructor)
services.Configure("StorageConfigs", options =>
{
options.UsingLocal = storageConfig.UsingLocal;
options.LocalFolder = storageConfig.LocalFolder;
options.Bucket = storageConfig.Bucket;
options.MinioConfig = storageConfig.MinioConfig;
options.RetryCount = storageConfig.RetryCount;
});
// Register ConfigService (creates StorageManager internally)
services.AddSingleton();
// Register ConfigManager (depends on IConfigService)
services.AddSingleton();
return services;
}
///
/// Đăng ký các services cho CustomConfiguration với StorageConfig từ IConfiguration
///
public static IServiceCollection AddCustomConfiguration(
this IServiceCollection services,
IConfiguration configuration,
string configSectionName = "StorageConfig")
{
services.Configure("StorageConfigs", options =>
{
configuration.GetSection(configSectionName).Bind(options);
});
// Register ConfigService (creates StorageManager internally)
services.AddSingleton();
// Register ConfigManager (depends on IConfigService)
services.AddSingleton();
return services;
}
}