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; } }