Если вы думаете о хитрости как о системе проводки, похожей на пружину, то на самом деле не имеет смысла связывать общий экземпляр. Вы связываете конкретные экземпляры с ключами, поэтому, когда другой экземплярный класс помечает что-то с помощью @Inject BarFactory, вы получаете определенный созданный экземпляр.
Поскольку ваша реализация является общей, вы не предоставили достаточно информации для внедрения конкретного экземпляра. Хотя я не использовал factoryprovider, я предполагаю, что вам нужно привязать Barfactory к полностью параметризованному экземпляру, например, BarImpl<Concrete>
вместо BarImpl)
Между прочим, поскольку вы связываете BarFactory.class, если вы хотите связать несколько экземпляров, вам придется как-то их сгибать, либо по имени, что-то вроде (не проверял синтаксис, но)
bind(BarFactory.class).annotatedWith(Names.named("name1"))
.toProvider(
or by generics, bind(BarFactory<Concrete>).toProvider...