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

Guice协助:没有java实现。lang.用@com注释的字符串。谷歌。注射助理项目。已绑定辅助(值=前缀)

归鸿朗
2023-03-14

我已经做了一百万次了,但是现在它不起作用,我不知道为什么!

我的界面定义了作者的合同,比如:

public interface Writer {
    
    void exit() throws IOException;

    void write(String row) throws IOException;
}

具体实施:

import com.google.inject.assistedinject.Assisted;
import javax.inject.Inject;


public class TextFileWriter implements Writer {

    //...
    @Inject
    public TextFileWriter(@Assisted("store") String store, @Assisted("prefix") String prefix, @Assisted Line line, @Assisted LocalDate date) throws IOException {
    //...
    }

    //...
}

现在工厂:

public interface WriterFactory {
    
    Writer textWriter(String store, String prefix, Line line, LocalDate date) throws IOException;
}

最后是我的配置:

@Override
protected void configure() {
    install(new FactoryModuleBuilder()
            .implement(Writer.class, TextFileWriter.class)
            .build(WriterFactory.class)
    );
}

在启动时,它会抛出一个异常,即:

>

没有java实现。lang.用@com注释的字符串。谷歌。注射助理项目。已绑定辅助(值=存储)<定位java时。lang.用@com注释的字符串。谷歌。注射助理项目。辅助(值=存储)用于守护进程的第一个参数。文件记录器。TextFileWriter。(TextFileWriter.java:38)
在守护进程上。文件记录器。WriterFactory。com上的textWriter(WriterFactory.java:1)。谷歌。注射助理项目。FactoryProvider2。在com上初始化(FactoryProvider2.java:666)。谷歌。注射助理项目。FactoryModuleBuilder 1美元。配置(FactoryModuleBuilder.java:335)(通过模块:com.google.inject.util.modules$OverrideModule)-

在daemons.filerecorder.WriterFactory.textWriter(WriterFactory.java: 1)
在com.google.inject.assistedinject.FactoryProvider2.initialize(FactoryProvider2.java:666)在com.google.inject.assistedinject.FactoryModuleBuilder$1.configure(FactoryModuleBuilder.java:335)(通过模块:com.google.inject.util.模块$OverrideModule-

有什么想法来完成这项工作吗?

提前感谢。

共有1个答案

冯元徽
2023-03-14

工厂方法中缺少辅助的参数。因此,调整如下:

public interface WriterFactory {
  Writer textWriter(@Assisted("store") String store, @Assisted("prefix") String prefix, Line line, LocalDate date) throws IOException;
}

这在FactoryModuleBuilderjavadoc,“使参数类型不同”部分中进行了解释。这是强制性的,因为您有两个具有相同类型的参数,String

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

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

  • 目前,我将辅助注射与命名参数一起使用,如下所示: 这很棒。但是我认为使用字符串作为参数的标识符有点难看。我想做的是以下内容: 所以本质上我想要自定义辅助注释。有办法做到这一点吗?

  • 我是Guice的新手,所以我试图理解AssistedInject。我有一个非常简单的项目: 我要注入的类: 带辅助注射的类别: 工厂 主类: 但它仍然不起作用,我不明白,我错在哪里?

  • 我在实施辅助注射时遇到了错误。 辅助注射一直有效,直到我引入了另一个名为管理器的类,它依赖于辅助类。经理想要使用代码在构建喷油器图时中断。它没有更进一步。 直觉上,我理解当对象A得到帮助时,那么B(依赖于A)实际上也通过A得到了隐含的帮助。 请注意,我检查过了。我想像ColinD这样的人肯定知道答案如何使用Guice的AssistedInject?如何将辅助注入类绑定到接口? 出于好奇,有没有好的

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