public static IServiceCollection AddConsul(this IServiceCollection serviceCollection) { IConfiguration configuration; using (var serviceProvider = serviceCollection.BuildServiceProvider()) { configuration = serviceProvider.GetService<IConfiguration>(); } ConsulOptions consulConfigOptions = configuration.GetOptions<ConsulOptions>("Consul"); serviceCollection.Configure<ConsulOptions>(configuration.GetSection("Consul")); serviceCollection.AddTransient<IConsulServices, ConsulServices>(); serviceCollection.AddHttpClient<IConsulHttpClient, ConsulHttpClient>(); return serviceCollection.AddSingleton<IConsulClient>(c => new ConsulClient(cfg => { if (!string.IsNullOrEmpty(consulConfigOptions.Host)) { cfg.Address = new Uri(consulConfigOptions.Host); } })); } public static string UseConsul(this IApplicationBuilder app) { using (var scope = app.ApplicationServices.CreateScope()) { var Iconfig = scope.ServiceProvider.GetService<IConfiguration>(); var config = Iconfig.GetOptions<ConsulOptions>("Consul"); var appOptions = Iconfig.GetOptions<AppOptions>("App"); if (!config.Enabled) return String.Empty; Guid serviceId = Guid.NewGuid(); string consulServiceID = $"{config.Service}:{serviceId}"; var client = scope.ServiceProvider.GetService<IConsulClient>(); var consulServiceRistration = new AgentServiceRegistration { Name = config.Service, ID = consulServiceID, Address = config.Address, Port = config.Port }; client.Agent.ServiceRegister(consulServiceRistration); return consulServiceID; } }