基于 class 绑定创建不同类型对象的单个提供程序

Single provider that creates different types of object based on class binding

我正在尝试注入多个 datastax Mapper,但 Provider 创建代码始终相同,为每种类型编写提供程序是多余的。

提供商代码是

public class FooMapperProvider extends Provider<Mapper<Foo>> () {
    private final MappingManager mappingManager

    @Inject
    FooMapperProvider(MappingManager) {
        this.mappingManager = mappingManager;
    }

    @Override
    public Mapper<Foo> get() {
        mappingManager.mapper(Foo.class);
    }
}

是否可以为

绑定或创建提供者
bind(Foo.class).toProvider(GenericMapperProvider.class)
bind(Bar.class).toProvider(GenericMapperProvider.class)

因此 get 的调用方式 mappingManager.mapper 可以基于 class 为该特定绑定创建映射器?

我想尝试像

这样的东西
public class MapperProvider<T> implements Provider<Mapper<T>> {
    private final MappingManager mappingManager;
    private final Class klass;

    @Inject
    public MapperProvider(MappingManager mappingManager, Class klass) {
        this.mappingManager = mappingManager;
        this.klass = klass;
    }

    @Override
    public Mapper<T> get() {
        return mappingManager.mapper(klass);
    }
}

但我不知道如何指定 class 注入依赖项

public class MapperProvider<T> implements Provider<Mapper<T>> {
    private final MappingManager mappingManager;
    private final TypeLiteral<T> type;

    @Inject
    public MapperProvider(MappingManager mappingManager, TypeLiteral<T> type) {
        this.mappingManager = mappingManager;
        this.type = type;
    }

    @Override
    public Mapper<T> get() {
        return mappingManager.mapper(type.getRawType());
    }
}

bind(new TypeLiteral<Mapper<Foo>>(){})
       .toProvider(new TypeLiteral<MapperProvider<Foo>>(){});