package com.google.sitebricks; import com.google.common.base.Preconditions; import com.google.inject.AbstractModule; import com.google.inject.Key; import com.google.inject.binder.ScopedBindingBuilder; import com.google.inject.name.Names; import java.util.UUID; /** * @author dhanji@gmail.com (Dhanji R. Prasanna) */ public abstract class AwareModule extends AbstractModule { @Override protected final void configure() { configureLifecycle(); } protected abstract void configureLifecycle(); protected ScopedBindingBuilder observe(Class<? extends Aware> aware) { Preconditions.checkArgument(!Aware.class.equals(aware), "Can't bind to interface Aware"); return bind(Key.get(Aware.class, Names.named(UUID.randomUUID().toString()))).to(aware); } }