当前位置: 首页 > 知识库问答 >
问题:

Guice:无法插入辅助列表< Long >

昝枫
2023-03-14

我刚开始学习如何使用Guice,我在尝试配置辅助注射时遇到了一些问题。我有以下界面:

public interface Individual extends Comparable<Individual>, Iterable<Long>{ ... }

它将由工厂制造。构造函数必须接收一个长列表:

public interface IndividualFactory {
    public Individual createIndividual(List<Long> chromossomes);
}

实现类有一个@辅助参数来接收列表:

public class IndividualImpl implements Individual {
@Inject
public IndividualImpl(
    ConfigurationService configurationService,
    RandomService randomService,
    FitnessCalculatorService fitnessService,
    @Assisted List<Long> chromossomes
    ) { ... } 

最后,这是我的模块类:

public class SimpleModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(Individual.class).to(IndividualImpl.class);
        install(new FactoryModuleBuilder().implement(Individual.class,
            IndividualImpl.class).build(IndividualFactory.class));
}

问题是,当我运行项目时会显示此错误:

1) No implementation for java.util.ArrayList<java.lang.Long> annotated with @com.google.inject.assistedinject.Assisted(value=) was bound.
  while locating java.util.ArrayList<java.lang.Long> annotated with @com.google.inject.assistedinject.Assisted(value=)
    for parameter 3 at implementation.entities.IndividualImpl.<init>(IndividualImpl.java:25)
  at SimpleModule.configure(SimpleModule.java:36)

如果我只是删除辅助参数(不仅是注释,还有参数本身),一切正常。我不知道我做错了什么。我遵循了我找到的所有 Guice 教程,但找不到使用 List 的辅助参数示例

共有1个答案

晋俊贤
2023-03-14

删除:

bind(Individual.class).to(IndividualImpl.class);

使用您指定对@Inject Individual使用IndividualImpl的绑定。这毫无意义,因为您不会在代码的任何地方@Inject Individual。你将@注入个人工厂。

远程可能的是

bind(Individual.class).toProvider(BlowUpWithUseFactoryExceptionProvider.class);

但是这样做没有意义,因为默认的行为是相似的。

我可以建议:

Iterable<Long> -> DnaContaining
List<Long> -> DnaMaterial
 类似资料:
  • 我有一个工厂是这样的: 这样的类: 如何正确使用Google Guice来做同样的事情?我尝试了辅助注射,但我不确定如何创建“UrlBuilder”。谁能帮忙?

  • 我正在使用Guice Assisted Inject库为我建立一个工厂。我目前的设置如下: 这迫使我使用< code > factory . create controller(first,factory . create second(first))显式创建一个< code>SecondDep。是否可以更改我的绑定,这样我就可以简单地执行< code > factory . create con

  • 我一直在用guice做一个项目。 我有一个抽象类,它有很多实现。为了使用正确的实现,我使用一个工厂,它接收参数,然后返回正确的实例。 演示代码 我想知道的是,如果我可以用替换工厂,直接注入的实现(请注意,它们应该使用辅助注入)? 谢谢你。

  • 我已经使用google-guice和辅助注射机制有一段时间了。因为我在scala,刚刚发现scala-guice,我也对使用它感兴趣。但是我对如何使用辅助注射感到困惑。没有使用辅助注射的例子。 因此,我的问题是:是否可以使用scala guice辅助注射,如果可以,请提供一个简单的例子? 此外,对于google-guice,我使用以下库:javax.inject.jar、guice-3.0.jar

  • 看来Guice正在尝试使用不同于预期的创建方法。你知道怎么解决这个问题吗?如有任何指示,将不胜感激! 谢谢!

  • 我正在尝试在Guice进行辅助注射。 这是我的实现。 工厂界面。 吉思模块: 我得到错误:“DaoFactory不能用作键;这一点没有充分说明”。 我应该如何配置FactoryModuleBuilder? 我的目标是在运行时使用DaoFactory获取Dao的类型化实例