Inyectar una fábrica genérica en Guice

El siguiente código es un ejemplo de una fábrica que produce unBar<T> dado unFoo<T>. A la fábrica no le importa quéT es: para cualquier tipoT, puede hacer unBar<T> a partir de unaFoo<T>.

import com.google.inject.*;
import com.google.inject.assistedinject.*;

class Foo<T> {
  public void flip(T x) { System.out.println("flip: " + x); }
}

interface Bar<T> {
  void flipflop(T x);
}

class BarImpl<T> implements Bar<T> {
  Foo<T> foo;

  @Inject
  BarImpl(Foo<T> foo) { this.foo = foo; }

  public void flipflop(T x) { foo.flip(x); System.out.println("flop: " + x); }
}

interface BarFactory {
  <T> Bar<T> create(Foo<T> f);
}

class Module extends AbstractModule {
  public void configure() {
    bind(BarFactory.class)
      .toProvider( 
          FactoryProvider.newFactory( BarFactory.class, BarImpl.class ) 
                   );
  }
}

public class GenericInject {
  public static void main(String[] args) {
    Injector injector = Guice.createInjector(new Module());

    Foo<Integer> foo = new Foo<Integer>();
    Bar<Integer> bar = injector.getInstance(BarFactory.class).create(foo);
    bar.flipflop(0);
  }
}

Cuando ejecuto el código, recibo los siguientes errores de Guice:

1) No implementation for BarFactory was bound.
  at Module.configure(GenericInject.java:38)

2) Bar<T> cannot be used as a key; It is not fully specified.

La única referencia que puedo encontrar a los genéricos en la documentación de Guice dice que use unTypeLiteral. Pero no tengo un tipo literal, tengo un marcador de posición genérico que no es relevante para la fábrica en absoluto. ¿Algun consejo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta