using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
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);
}
}
}
}