- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近开始使用 Guice,需要一些帮助。
我有一个带有构造函数的类,其中包含 3 种不同的要注入(inject)的参数。下面是类
@Inject public Bullet(EntityParams entityParams, Movable movable, Renderable renderable) {
super(entityParams, movable, renderable);
}
这里entityParams
应该是辅助注入(inject)
Movable
接口(interface)有多个实现,因此需要使用 MapBinder。
Renderable
接口(interface)只有一种实现,所以这不是问题。
我现在要做的是 ->
public class DefaultEntityFactory implements EntityFactory {
private final Provider<Renderable> renderableProvider;
private final Map<String, Movable> movableMap;
@Inject public DefaultEntityFactory(Provider<Renderable> renderableProvider, Map<String, Movable> movableMap) {
this.renderableProvider = renderableProvider;
this.movableMap = movableMap;
}
@Override
public Bullet create(EntityParams entityParams, String movableType) {
return new Bullet(entityParams, movableMap.get(movableType), renderableProvider.get());
}
}
工厂类给了我一个 Bullet,但我只是想知道这是他们做这件事的更好方法吗?
最佳答案
从您现有的代码开始
@Inject
public Bullet(
EntityParams entityParams,
Movable movable,
Renderable renderable) {
super(entityParams, movable, renderable);
}
首先我会处理 map Binder 。
@Inject
public Bullet(
EntityParams entityParams,
String movableType,
Map<String, Provider<Movable>> movables,
Renderable renderable) {
super(entityParams, movables.get(movableType), renderable);
}
接下来,我将关注 AssistedInject
帮助页面。 https://github.com/google/guice/wiki/AssistedInject
首先,我添加了 @Assisted
注释。
@Inject
public Bullet(
@Assisted EntityParams entityParams,
@Assisted String MovableType,
Map<String, Provider<Movable>> movables,
Renderable renderable) {
super(entityParams, movables.get(movableType), renderable);
}
然后创建工厂接口(interface)。
public interface BulletFactory {
public Bullet create(EntityParams entityParams, String movableType);
}
并将其绑定(bind)在一起。
bind(BulletFactory.class)
.toProvider(FactoryProvider.newFactory(BulletFactory.class, Bullet.class));
您现在可以注入(inject) BulletFactory
来创建新的 Bullet
。
根据您的问题,使用 @Named
代替 multi-binder 可能会更好(传入 String 类型并立即将其从 multi-binder 中拉出感觉有点尴尬) 但这应该有效。
关于java - Google Guice 中的 AssistedInject 和 MapBinder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34446706/
我有一个如下所示的构造函数: @Inject public MyClass( @Named("config") String configFile, @Named("t
我刚刚开始学习Guice,但我已经遇到了一个问题。我有一个接口(interface) PlayerFactory 和一个实现 BlackjackPlayer PlayerFactory.java pu
关于 assisted injection 的页面解释了如何通过使用 @Assisted 注释构造函数中的一些参数来完成辅助注入(inject),但它没有解释 @AssistedInject 注释的用
我一直在一个项目中使用 guice。 我有一个抽象类,它有很多实现。为了使用正确的实现,我使用一个工厂来接收参数,然后返回正确的实例。 演示代码 @Singleton public class MyF
当我运行下面的代码时,我得到输出“Bar got 1234”。看起来 Guice 找不到 num2 的绑定(bind),并隐式分配了 num1 的值。这是 AssistedInject 功能的一部分吗
我已阅读 https://github.com/google/guice/wiki/AssistedInject ,但它没有说明如何传入 AssistedInject 参数的值。 injector.g
我想在运行时使用 Hilt 为 ViewModel 提供一些依赖项。我遵循了 d.android.com this 指导的解决方案. @HiltViewModel public class Vi
我想做这样的事情: @Inject private CollectorsListHolderFactory collectorsListHolderFactory; private Collector
我正在尝试使用 Guice 3.0 AssistedInject,它不会实例化工厂。 SSCCE代码: 父类 public class ParentClass() { @Inject privat
在我的 guice 模块中,我有多个工厂,如下所示: install(new FactoryModuleBuilder().implement(SportsCar.class,Ferrari.clas
我找不到如何进行“动态辅助注入(inject)”的方法。我的意思是我想根据参数向工厂提供它需要在运行时使用的实现类名。这是我目前拥有的: interface Letter {} abstract cl
我正在使用 Guice Assisted Inject图书馆为我 build 一个工厂。我目前的设置如下: class MyObject { @Inject public MyObject(@As
我最近开始使用 Guice,需要一些帮助。 我有一个带有构造函数的类,其中包含 3 种不同的要注入(inject)的参数。下面是类 @Inject public Bullet(EntityParams
我遇到一个奇怪的错误,在使用辅助注入(inject)时我无法克服: [DEBUG] [project] - Rebinding com.gwtplatform.mvp.client.DesktopGi
什么是 Spring Framework相当于FactoryModuleBuilder , @AssistedInject , 和 @Assisted在 Google Guice ?换句话说,使用 S
我是一名优秀的程序员,十分优秀!