using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace BotSharp.Core.Modules { /// /// Startup class for configurable modules /// public class ModulesStartup { private readonly IEnumerable _modules; private readonly IConfiguration _configuration; /// /// Create an instance of /// /// /// Application configuration containing modules configuration /// public ModulesStartup(IConfiguration configuration) { this._configuration = configuration ?? throw new ArgumentNullException(nameof(configuration)); ModulesOptions options = configuration.Get(); this._modules = options.Modules .Select(s => { Type type = Type.GetType(s.Type); if (type == null) { throw new TypeLoadException( $"Cannot load type \"{s.Type}\""); } IModule module = (IModule)Activator.CreateInstance(type); return module; } ); } /// /// Configurates the services. /// /// /// Instance of . /// /// /// Instance of . /// public void ConfigureServices(IServiceCollection services) { foreach (IModule module in this._modules) { module.ConfigureServices(services, this._configuration); } } /// /// Configures module services. /// /// /// Instance of . /// public void Configure(IApplicationBuilder app) { foreach (IModule module in this._modules) { module.Configure(app); } } } }