package tc.oc.commons.core.inject;
import com.google.inject.TypeLiteral;
import tc.oc.commons.core.reflect.ResolvableType;
import tc.oc.commons.core.reflect.TypeParameter;
/**
* @see Proxied
*/
public class ProxiedManifest<T> extends KeyedManifest {
private final TypeLiteral<T> type;
public ProxiedManifest(TypeLiteral<T> type) {
this.type = type;
}
@Override
protected Object manifestKey() {
return type;
}
@Override
protected void configure() {
if(!type.getRawType().isInterface()) {
addError("Cannot proxy " + type + " because it is not an interface");
}
bind(type)
.annotatedWith(Proxied.class)
.toProvider(new ResolvableType<ProxyProvider<T>>(){}.where(new TypeParameter<T>(){}, type));
}
}