using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Nacos.V2.DependencyInjection; namespace Ocelot.Provider.Nacos.NacosClient.V2; public static class ServiceCollectionExtensions { /// /// Add Nacos AspNet. This will register and de-register instance automatically. /// Mainly for nacos server 2.x /// /// services. /// configuration /// IServiceCollection public static IServiceCollection AddNacosAspNet(this IServiceCollection services, IConfiguration configuration) { services.Configure(configuration.GetSection("nacos")); services.AddNacosV2Naming(configuration); services.AddSingleton(); return services; } /// /// Add Nacos AspNet. This will register and de-register instance automatically. /// Mainly for nacos server 2.x /// /// services /// optionsAccs /// IServiceCollection public static IServiceCollection AddNacosAspNet(this IServiceCollection services, Action optionsAccs) { services.Configure(optionsAccs); var options = new NacosAspNetOptions(); optionsAccs.Invoke(options); services.AddNacosV2Naming(x => options.BuildSdkOptions()); services.AddSingleton(); return services; } public static async Task UseNacosAspNet(this IApplicationBuilder app, IHostApplicationLifetime lifetime) { RegSvcBgTask regSvcBgTask = app.ApplicationServices.GetRequiredService(); await regSvcBgTask.StartAsync(); lifetime.ApplicationStopping.Register(async () => { await regSvcBgTask.StopAsync(); }); return app; } }