基于 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>>(){});
我正在尝试注入多个 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>>(){});