単純な発想も見方しだいで

マップへのインジェクトが欲しかった、Google guice2.0 に正式リリースが待ち遠しい。
しかたなく、マップ生成にInject実行を隠蔽させることにしてのパターンである。
public class VettyFactory{
   private Map<String,Vetty> vmap;

   public VettyFactory(){
      this.vmap = new HashMap<String,Vetty>();
   }
   // keyに対して、Vettyインターフェースを実装するclass を指定することで
   // key ⇔ 任意のVetty実装インスタンス関係を構築し、getVettyMap() で
  // そのMap を返せるようにする。
   public void regist(String key,Class<? extends Vetty> cls){
      Injector injector = Guice.createInjector(new _Module(cls));
      VettyBuilder builder = injector.getInstance(VettyBuilder.class);
      this.vmap.put(key,builder.getVetty());

   }
   /**
    * @return Map<String,Vetty> key=キー, value=Vettyインスタンス
    */
   public Map<String,Vetty> getVettyMap(){
      return this.vmap;
   }

   class _Module implements Module{
      private Class<? extends Vetty> vcls;
      _Module(Class<? extends Vetty> cls){
         this.vcls = cls;
      }
      /* (非 Javadoc)
       * @see com.google.inject.Module#configure(com.google.inject.Binder)
       */
      public void configure(Binder binder){
         binder.bind(Vetty.class).to(this.vcls);
      }
   }

}
======== VettyBuilder.class =======================
import com.google.inject.Inject;
class VettyBuilder{
   @Inject private Vetty vetty;
   protected Vetty getVetty(){
      return this.vetty;
   }
}