如何注入泛型继承类型?

时间:2018-10-02 01:41:28

标签: java cdi weld weld-se weld-junit5

我花了很多时间来寻找答案,但我想我不得不问。

我正在使用Weld-SE来测试我的实体。

我准备了实体随机化器进行测试。

abstract class BaseEntityRandomizer<T extends BaseEntity>
        implements Randomizer<T> {

    @Override public T getRandomValue() {
        ...
    }
}

class MySomeOtherEntityRandomizer
        extends BaseEntityRandomizer<MySomeOther> {

    @Override public MySomeOther getRandomValue() {
        ...
    }
}

现在,在测试类中,我想注入那些与通用参数匹配的随机化器

@ExtendWith(WeldJunit5Extension.class)
@AddPackages({BaseEntityRandomizer.class})
abstract class BaseEntityTest<T extends BaseEntity> {

    @Test void doSome() {
    }

    @Inject
    private BaseEntityRandomizer<T> entityRandomizer;
}

class MySomeOtherTest extends BaseEntityTest<MySomeOther> {
    ...
    // I expect an instance of MySomeOtherRandomizer in injected
    // into the entityRandomizer field.
}

准备了随机化器和测试的子类。

但是我无法使其正常工作。

我如何使其工作?

我尝试了以下工厂课程

class BaseEntityRandomizerFactory {

   @Produces
   public BaseEntityRandomizer<MySome> produceMySomeRandomizer() {
        return new MySomeRandomizer();
   }
}

我知道了

org.jboss.weld.exceptions.IllegalArgumentException: 
WELD-001408: Unsatisfied dependencies for type BaseEntityRandomizer<T extends BaseEntity> with qualifiers @Default
  at injection point [BackedAnnotatedField] @Inject protected transient ....BaseEntityTest.entityRandomizer
  at ....BaseEntityTest.entityRandomizer(BaseEntityTest.java:0)

0 个答案:

没有答案