using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Configuration; namespace BotSharp.Core; public static class BotSharpServiceCollectionExtensions { public static IServiceCollection AddBotSharp(this IServiceCollection services, IConfiguration config) { services.AddScoped(); services.AddScoped(); var agentSettings = new AgentSettings(); config.Bind("Agent", agentSettings); services.AddSingleton((IServiceProvider x) => agentSettings); var convsationSettings = new ConversationSetting(); config.Bind("Conversation", convsationSettings); services.AddSingleton((IServiceProvider x) => convsationSettings); services.AddScoped(); services.AddScoped(); services.AddScoped(); RegisterPlugins(services, config); return services; } public static IServiceCollection ConfigureBotSharpRepository(this IServiceCollection services, IConfiguration config) where Tdb : DataContext { var databaseSettings = new DatabaseSettings(); config.Bind("Database", databaseSettings); services.AddSingleton((IServiceProvider x) => databaseSettings); var myDatabaseSettings = new MyDatabaseSettings(); config.Bind("Database", myDatabaseSettings); services.AddSingleton((IServiceProvider x) => myDatabaseSettings); services.AddScoped((IServiceProvider x) => DataContextHelper.GetDbContext(myDatabaseSettings, x)); services.AddScoped(sp => { return myDatabaseSettings.Default == "FileRepository" ? new FileRepository(myDatabaseSettings, sp) : DataContextHelper.GetDbContext(myDatabaseSettings, sp); }); return services; } public static IApplicationBuilder UseBotSharp(this IApplicationBuilder app) { if (app == null) { throw new ArgumentNullException(nameof(app)); } app.ApplicationServices.GetRequiredService().Configure(app); return app; } public static void RegisterPlugins(IServiceCollection services, IConfiguration config) { var pluginSettings = new PluginLoaderSettings(); config.Bind("PluginLoader", pluginSettings); var loader = new PluginLoader(services, config, pluginSettings); loader.Load(); services.AddSingleton(loader); } }