-
Notifications
You must be signed in to change notification settings - Fork 21
Expand file tree
/
Copy pathBootstrapper.cs
More file actions
105 lines (90 loc) · 3.71 KB
/
Bootstrapper.cs
File metadata and controls
105 lines (90 loc) · 3.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
using MaIN.Core.Hub;
using MaIN.Core.Interfaces;
using MaIN.Core.Services;
using MaIN.Domain.Configuration;
using MaIN.Infrastructure;
using MaIN.Services;
using MaIN.Services.Services;
using MaIN.Services.Services.Abstract;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace MaIN.Core;
public static class Bootstrapper
{
public static IServiceCollection AddMaIN(
this IServiceCollection services,
IConfiguration configuration,
Action<MaINSettings>? configureSettings = null)
{
services.ConfigureMaIN(configuration, configureSettings);
services.ConfigureInfrastructure(configuration);
services.AddAIHub();
return services;
}
public static IServiceProvider UseMaIN(this IServiceProvider sp)
{
_ = sp.GetRequiredService<IAIHubServices>();
return sp;
}
public static IServiceCollection AddAIHub(this IServiceCollection services)
{
// Register core services
services.AddSingleton<IChatService, ChatService>();
services.AddSingleton<IAgentService, AgentService>();
services.AddSingleton<IAgentFlowService, AgentFlowService>();
services.AddSingleton<IMcpService, McpService>();
// Register service provider for AIHub
services.AddSingleton<IAIHubServices>(sp =>
{
var aiServices = new AIHubServices(
sp.GetRequiredService<IChatService>(),
sp.GetRequiredService<IAgentService>(),
sp.GetRequiredService<IAgentFlowService>(),
sp.GetRequiredService<IMcpService>()
);
var settings = sp.GetRequiredService<MaINSettings>();
var httpClientFactory = sp.GetRequiredService<IHttpClientFactory>();
// Initialize AIHub with the services
AIHub.Initialize(aiServices, settings, httpClientFactory );
return aiServices;
}
);
// Ensure IHttpClientFactory is registered
if (services.All(sd => sd.ServiceType != typeof(IHttpClientFactory)))
{
services.AddHttpClient(); // Register the default HttpClientFactory
}
return services;
}
}
public static class MaINBootstrapper
{
private static IServiceProvider? _serviceProvider;
/// <summary>
/// Initializes the dependency injection container and registers all services.
/// </summary>
/// <param name="configuration">The application configuration.</param>
/// <param name="configureSettings">Optional settings configuration.</param>
public static void Initialize(IConfiguration? configuration = null, Action<MaINSettings>? configureSettings = null)
{
// Create a new ServiceCollection
var services = new ServiceCollection();
// Build configuration if not provided
if (configuration == null)
{
var basePath = Directory.GetCurrentDirectory();
configuration = new ConfigurationBuilder()
.SetBasePath(basePath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
// Use your existing extension method to register the MaIN services
services.AddMaIN(configuration, configureSettings);
// Build the service provider
_serviceProvider = services.BuildServiceProvider();
// This call ensures that any initialization steps are performed (e.g. initializing agents)
_serviceProvider.UseMaIN();
Console.WriteLine("AIHub Initialized Successfully");
}
}
}