BotSharp/src/Infrastructure/BotSharp.Core/BotSharpServiceCollectionExtensions.cs

78 lines
2.4 KiB
C#
Raw Normal View History

2023-06-27 18:31:13 +00:00
using BotSharp.Abstraction.Conversations.Settings;
2023-05-27 01:58:31 +00:00
using Microsoft.AspNetCore.Builder;
2023-06-03 02:07:30 +00:00
using Microsoft.Extensions.Configuration;
2023-05-27 01:58:31 +00:00
namespace BotSharp.Core;
public static class BotSharpServiceCollectionExtensions
{
2023-06-03 14:57:08 +00:00
public static IServiceCollection AddBotSharp(this IServiceCollection services, IConfiguration config)
2023-05-27 01:58:31 +00:00
{
2023-06-17 02:42:35 +00:00
services.AddScoped<IUserIdentity, UserIdentity>();
2023-06-11 23:46:02 +00:00
services.AddScoped<IUserService, UserService>();
2023-06-23 04:43:00 +00:00
2023-06-11 23:46:02 +00:00
services.AddScoped<IAgentService, AgentService>();
2023-06-23 04:43:00 +00:00
2023-06-27 18:31:13 +00:00
var convsationSettings = new ConversationSetting();
config.Bind("Conversation", convsationSettings);
services.AddSingleton((IServiceProvider x) => convsationSettings);
2023-06-23 04:43:00 +00:00
2023-06-27 18:31:13 +00:00
services.AddScoped<IConversationStorage, ConversationStorage>();
services.AddScoped<IConversationService, ConversationService>();
2023-06-18 18:15:00 +00:00
2023-06-03 14:57:08 +00:00
RegisterRepository(services, config);
2023-06-10 02:56:04 +00:00
RegisterPlugins(services, config);
2023-05-27 01:58:31 +00:00
return services;
}
public static void ConfigureBotSharp(this IServiceCollection services)
{
}
public static IApplicationBuilder UseBotSharp(this IApplicationBuilder app)
{
if (app == null)
{
throw new ArgumentNullException(nameof(app));
}
2023-06-26 22:16:21 +00:00
app.ApplicationServices.GetRequiredService<PluginLoader>().Configure(app);
2023-05-27 01:58:31 +00:00
return app;
}
2023-06-03 02:07:30 +00:00
2023-06-03 14:57:08 +00:00
public static void RegisterRepository(IServiceCollection services, IConfiguration config)
2023-06-03 02:07:30 +00:00
{
var databaseSettings = new DatabaseSettings();
config.Bind("Database", databaseSettings);
2023-06-27 18:31:13 +00:00
services.AddSingleton((IServiceProvider x) => databaseSettings);
2023-06-03 02:07:30 +00:00
var myDatabaseSettings = new MyDatabaseSettings();
config.Bind("Database", myDatabaseSettings);
2023-06-27 18:31:13 +00:00
services.AddSingleton((IServiceProvider x) => databaseSettings);
2023-06-03 02:07:30 +00:00
services.AddScoped((IServiceProvider x) =>
{
return DataContextHelper.GetDbContext<MongoDbContext>(myDatabaseSettings, x);
});
2023-06-07 00:59:32 +00:00
2023-06-11 23:46:02 +00:00
services.AddScoped((IServiceProvider x) =>
2023-06-07 00:59:32 +00:00
{
2023-06-11 23:46:02 +00:00
return DataContextHelper.GetDbContext<AgentDbContext>(myDatabaseSettings, x);
2023-06-07 00:59:32 +00:00
});
2023-06-03 02:07:30 +00:00
}
2023-06-10 02:56:04 +00:00
public static void RegisterPlugins(IServiceCollection services, IConfiguration config)
{
2023-06-17 02:42:35 +00:00
var pluginSettings = new PluginLoaderSettings();
config.Bind("PluginLoader", pluginSettings);
2023-06-11 23:46:02 +00:00
2023-06-17 02:42:35 +00:00
var loader = new PluginLoader(services, config, pluginSettings);
loader.Load();
2023-06-26 22:16:21 +00:00
services.AddSingleton(loader);
2023-06-10 02:56:04 +00:00
}
2023-05-27 01:58:31 +00:00
}