package jj.resource; import com.google.inject.Binder; import com.google.inject.TypeLiteral; import com.google.inject.multibindings.MapBinder; public class LocationResolverBinder { private final MapBinder<Class<? extends Location>, LocationResolver> pathResolverBinder; public LocationResolverBinder(Binder binder) { pathResolverBinder = MapBinder.newMapBinder( binder, new TypeLiteral<Class<? extends Location>>() {}, new TypeLiteral<LocationResolver>() {} ); } public interface With { void with(Class<? extends LocationResolver> pathResolver); } public With resolvePathsFor(Class<? extends Location> locationClass) { return (pathResolver) -> { pathResolverBinder.addBinding(locationClass).to(pathResolver); }; } }