package com.netflix.suro.client; import javax.inject.Singleton; import com.google.inject.AbstractModule; import com.google.inject.multibindings.MapBinder; import com.netflix.governator.guice.lazy.LazySingletonScope; import com.netflix.loadbalancer.ILoadBalancer; import com.netflix.suro.client.async.AsyncSuroClient; import com.netflix.suro.connection.EurekaLoadBalancer; import com.netflix.suro.connection.StaticLoadBalancer; @Singleton public class SuroClientModule extends AbstractModule { @Override protected void configure() { MapBinder<String, ILoadBalancer> loadBalancers = MapBinder.newMapBinder(binder(), String.class, ILoadBalancer.class); loadBalancers.addBinding("eureka").to(EurekaLoadBalancer.class); loadBalancers.addBinding("static").to(StaticLoadBalancer.class); MapBinder<String, ISuroClient> clientImpls = MapBinder.newMapBinder(binder(), String.class, ISuroClient.class); clientImpls.addBinding("async").to(AsyncSuroClient.class).in(LazySingletonScope.get()); clientImpls.addBinding("sync").to(SyncSuroClient.class).in(LazySingletonScope.get()); bind(ISuroClient.class).toProvider(ConfigBasedSuroClientProvider.class); bind(ILoadBalancer.class).toProvider(ConfigBasedLoadBalancerProvider.class); } }