, Consul.NET
. , :
var registration = new AgentServiceRegistration
{
Name = "foo",
Port = 4242,
Address = "http://bar"
};
await client.Agent.ServiceRegister(registration);
ASP.NET Core DI . json ConsulOptions (DTO - ):
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();
services.Configure<ConsulOptions>(Configuration);
}
ConsulService, ConsulOptions :
public class ConsulService : IDisposable
{
public ConsulService(IOptions<ConsulOptions> optAccessor) { }
public void Register()
{
client.Agent.ServiceRegister(registration).GetAwaiter().GetResult();
}
}
DI:
services.AddTransient<ConsulService>();
IApplicationBuilder :
public void Configure(IApplicationBuilder app)
{
app.ConsulRegister();
}
ConsulRegister / :
public static class ApplicationBuilderExtensions
{
public static ConsulService Service { get; set; }
public static IApplicationBuilder ConsulRegister(this IApplicationBuilder app)
{
Service = app.ApplicationServices.GetService<ConsulService>();
var life = app.ApplicationServices.GetService<IApplicationLifetime>();
life.ApplicationStarted.Register(OnStarted);
life.ApplicationStopping.Register(OnStopping);
return app;
}
private static void OnStarted()
{
Service.Register();
}
}
, Startup . API OnStopping!