【问题标题】:How I bind a Instance of a Class without the @Default qualifier如何绑定没有 @Default 限定符的类的实例
【发布时间】:2018-06-22 20:22:14
【问题描述】:

我在测试中使用了 Weld-junit 来使用 CDI。

如何注入我之前创建的类的实例?就像我可以在从 AbstractBinder 扩展的 Binder 中做的那样。

我的测试班:

@EnableWeld
public class VersionProcessTest {

    @WeldSetup
    public WeldInitiator weld = WeldInitiator
            .of(VersionProcess.class);

    @Test
    public void GetSolversVersion() throws DirectoryNotFoundException {

        weld.event().select(FileService.class).fire(new FileService("workDir", "solverTest"));

        String version = weld.select(VersionProcess.class).get().execute();
        assertThat("should return version string", version, instanceOf(String.class));
    }
}

我的活页夹:

public class TestBinder extends AbstractBinder {
    @Override
    protected void configure() {
        bind(new FileService("test")).to(FileService.class);
        bind(SolverVersionApiServiceImpl.class).to(SolverVersionApiService.class);
    }
}

【问题讨论】:

    标签: java junit5 jboss-weld


    【解决方案1】:

    所以我真正想要的是为我的注入类声明一个 Produces。

    为此,我为 FileService(注入类)添加了 Produces 声明:

    @RequestScoped
    @Produces
    FileService fileService = new FileService("workDir", "solverTest");
    

    并更改 WeldInitiator 声明以设置包含 @Produces 注释的类,在我的例子中是 TestClass,所以:

    @WeldSetup
    public WeldInitiator weld = WeldInitiator.from(VersionProcess.class, VersionProcessTest.class).activate(RequestScoped.class).build();
    

    瞧,它正在为 VersionProcess 类进行依赖注入。

    【讨论】:

      猜你喜欢
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      相关资源
      最近更新 更多