using Microsoft.Extensions.DependencyInjection; using MycroForge.CLI.Commands; using MycroForge.Core.Contract; using MycroForge.CLI.Features; using MycroForge.Core; namespace MycroForge.CLI.Extensions; public static class ServiceCollectionExtensions { public static IServiceCollection RegisterCommandDefaults(this IServiceCollection services) { // Register ProjectContext, OptionsContainer & features services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); // Register "m4g" services.AddScoped(); services.AddScoped, Commands.MycroForge.Init>(); services.AddScoped, Commands.MycroForge.Install>(); services.AddScoped, Commands.MycroForge.Uninstall>(); services.AddScoped, Commands.MycroForge.Hydrate>(); // Register "m4g add" services.AddScoped, Commands.MycroForge.Add>(); services.AddScoped, Commands.MycroForge.Add.Api>(); services.AddScoped, Commands.MycroForge.Add.Db>(); services.AddScoped, Commands.MycroForge.Add.Git>(); services.AddScoped, Commands.MycroForge.Add.GitIgnore>(); // Register "m4g generate" services.AddScoped, Commands.MycroForge.Generate>(); services.AddScoped, Commands.MycroForge.Generate.Service>(); services.AddScoped, Commands.MycroForge.Generate.Venv>(); // Register "m4g api" services.AddScoped, Commands.MycroForge.Api>(); services.AddScoped, Commands.MycroForge.Api.Run>(); services.AddScoped, Commands.MycroForge.Api.Generate>(); services.AddScoped, Commands.MycroForge.Api.Generate.Router>(); services.AddScoped, Commands.MycroForge.Api.Generate.Crud>(); // Register "m4g db" services.AddScoped, Commands.MycroForge.Db>(); services.AddScoped, Commands.MycroForge.Db.Run>(); services.AddScoped, Commands.MycroForge.Db.Stop>(); services.AddScoped, Commands.MycroForge.Db.Migrate>(); services.AddScoped, Commands.MycroForge.Db.Rollback>(); services.AddScoped, Commands.MycroForge.Db.Generate>(); services.AddScoped, Commands.MycroForge.Db.Generate.Entity>(); services.AddScoped, Commands.MycroForge.Db.Generate.Migration>(); services.AddScoped, Commands.MycroForge.Db.Link>(); services.AddScoped, Commands.MycroForge.Db.Link.One>(); services.AddScoped, Commands.MycroForge.Db.Link.Many>(); // Register "m4g plugin" services.AddScoped, Commands.MycroForge.Plugin>(); services.AddScoped, Commands.MycroForge.Plugin.Init>(); services.AddScoped, Commands.MycroForge.Plugin.List>(); services.AddScoped, Commands.MycroForge.Plugin.Install>(); services.AddScoped, Commands.MycroForge.Plugin.Uninstall>(); return services; } public static IServiceCollection RegisterCommandPlugins(this IServiceCollection services) { var plugins = Plugins.Load(); foreach (var plugin in plugins) plugin.RegisterServices(services); return services; } }