Initial commit
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user