73 lines
2.9 KiB
C#
73 lines
2.9 KiB
C#
using Microsoft.AspNetCore.Builder;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using RobotNet10.ScriptEngine.Data;
|
|
using RobotNet10.ScriptEngine.HubContexts;
|
|
using RobotNet10.ScriptEngine.Hubs;
|
|
using RobotNet10.ScriptEngine.Shared;
|
|
|
|
namespace RobotNet10.ScriptEngine;
|
|
|
|
public static class ScriptEngineExtensions
|
|
{
|
|
/// <summary>
|
|
/// Adds ScriptEngine services to the service collection.
|
|
/// </summary>
|
|
/// <typeparam name="TScriptEngineResource">The type implementing IScriptEngineResource.</typeparam>
|
|
/// <param name="services">The service collection.</param>
|
|
/// <param name="optionsAction">The action to configure DbContext options.</param>
|
|
extension(IServiceCollection services)
|
|
{
|
|
public void AddScriptEngine<TScriptEngineResource>(Action<DbContextOptionsBuilder> optionsAction)
|
|
where TScriptEngineResource : class, IScriptEngineResource
|
|
{
|
|
// Note: SignalR must be configured before calling this method
|
|
// services.AddSignalR() should be called in Program.cs before this method
|
|
|
|
services.AddSingleton<IScriptEngineResource, TScriptEngineResource>()
|
|
.AddSingleton<ConsoleHubContext>()
|
|
.AddSingleton<VariableManager>()
|
|
.AddSingleton<FileManager>()
|
|
.AddSingleton<TaskManager>()
|
|
.AddSingleton<MissionManager>()
|
|
.AddSingleton<ScriptEngine>()
|
|
.AddDbContext<ScriptEngineDbContext>(optionsAction);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Maps ScriptEngine SignalR hubs to endpoints.
|
|
/// This extension method should be called in Program.cs after app.Build().
|
|
/// Example: app.MapScriptEngineHubs();
|
|
/// </summary>
|
|
/// <param name="app">The web application.</param>
|
|
extension(WebApplication app)
|
|
{
|
|
public void MapScriptEngineHubs()
|
|
{
|
|
app.MapHub<ConsoleHub>(HubEndpoints.ScriptConsoleHubPath);
|
|
app.MapHub<ScriptManagerHub>(HubEndpoints.ScriptManagerHubPath);
|
|
app.MapHub<FileManagerHub>(HubEndpoints.ScriptFileManagerHubPath);
|
|
app.MapHub<InstanceMissionHub>(HubEndpoints.InstanceMissionHubPath);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Seeds the ScriptEngine database by applying migrations.
|
|
/// </summary>
|
|
/// <param name="serviceProvider">The service provider.</param>
|
|
extension(IServiceProvider serviceProvider)
|
|
{
|
|
public async Task SeedScriptEngineDbAsync()
|
|
{
|
|
using var scope = serviceProvider.CreateScope();
|
|
|
|
using var appDb = scope.ServiceProvider.GetRequiredService<ScriptEngineDbContext>();
|
|
|
|
await appDb.Database.MigrateAsync();
|
|
await appDb.Database.EnsureCreatedAsync();
|
|
await appDb.SaveChangesAsync();
|
|
}
|
|
}
|
|
}
|