using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System.Collections.Concurrent; namespace zero.Architecture; public class ZeroModuleCollection { static ConcurrentDictionary _modules = new(); /// /// Get all registered modules /// public static IEnumerable GetAll() => _modules.Values; /// /// Adds a zero module /// public static void AddModule(IServiceCollection services, IConfiguration configuration) where T : class, IZeroModule, new() { AddModule(services, configuration, new T()); } /// /// Adds a zero module /// public static void AddModule(IServiceCollection services, IConfiguration configuration, T moduleInstance) where T : IZeroModule { AddModule(typeof(T), services, configuration, moduleInstance); } /// /// Adds a zero module /// public static void AddModule(Type moduleType, IServiceCollection services, IConfiguration configuration, IZeroModule moduleInstance) { if (_modules.ContainsKey(moduleType)) { return; } _modules.TryAdd(moduleType, moduleInstance); moduleInstance.ConfigureServices(services, configuration); } }