public static IOcelotBuilder AddGracefullLoadBalancer(this IOcelotBuilder builder)
        {
            GracefulLoadBalancerDelegatingHandler delegatingHandler = null;

            builder.Services.AddTransient <GracefulLoadBalancerDelegatingHandler>();
            builder.Services.AddTransient(s =>
            {
                delegatingHandler = s.GetService <GracefulLoadBalancerDelegatingHandler>();
                // Make this handler global.
                return(new GlobalDelegatingHandler(delegatingHandler));
            });

            Func <IServiceProvider, DownstreamRoute, IServiceDiscoveryProvider, GracefulLoadBalancer> loadBalancerFactoryFunc
                = (serviceProvider, route, serviceDiscoveryProvider) =>
                {
                return(new GracefulLoadBalancer(serviceProvider, route, serviceDiscoveryProvider.Get));
                };

            builder.AddCustomLoadBalancer(loadBalancerFactoryFunc);
            return(builder);
        }
 public static IOcelotBuilder AddRankingLoadBalancer(this IOcelotBuilder ocelot)
 {
     ocelot.AddCustomLoadBalancer((Route, serviceDiscoveryProvider) => new RankingLoadBalancer(serviceDiscoveryProvider.Get));
     return(ocelot);
 }