Javascript Aurelia DI通过抽象基和或接口获取类的实例

Javascript Aurelia DI通过抽象基和或接口获取类的实例,javascript,typescript,aurelia,Javascript,Typescript,Aurelia,我知道这可能超出了Aurelia的DI容器的范围,但可能不是 我希望能够随机返回从接口继承的任何类的实例 例如,我有 interface MonsterRecipe class KoboldRecipe implements MonsterRecipe class GoblinRecipe implements MonsterRecipe 这项工作的第一部分是获取一个类数组,从中随机选择 我尝试了let allRecipes=container.getAll(MonsterRecipe),

我知道这可能超出了Aurelia的DI容器的范围,但可能不是

我希望能够随机返回从接口继承的任何类的实例

例如,我有

interface MonsterRecipe

class KoboldRecipe implements MonsterRecipe

class GoblinRecipe implements MonsterRecipe
这项工作的第一部分是获取一个类数组,从中随机选择

我尝试了
let allRecipes=container.getAll(MonsterRecipe)
,但它返回了0个项目

我想我可能需要一些明确的注册

如果这是完全有缺陷的。。。
当我要一个
怪物配方时,有没有其他方法可以得到一个随机的GoblinRecipe或KoboldRecipe呢

export const RECIPES = [KoboldRecipe, GoblinRecipe];
在配置时:

container.registerHandler(MonsterRecipe, (container, key, resolver) => {
    let random = RECIPES[Math.floor(Math.random() * RECIPES.length)];
    return new random();
});
(这里不是单身人士)

--编辑:

使用小型装饰器构建阵列:

export const RECIPES: Function[] = [];

function randomRecipe(target: Function) {
    RECIPES.push(target);
}

export class MonsterRecipe {
    getName() {
        return "nothing";
    }
}

@randomRecipe
export class KoboldRecipe extends MonsterRecipe {
    getName() {
        return "KoboldRecipe";
    }
}

@randomRecipe
export class GoblinRecipe extends MonsterRecipe {
    getName() {
        return "GoblinRecipe";
    }
}

这样我就可以使用这个容器了。但我希望不去建立自己的食谱(不确定使用TypeScript或aurelia是否可行。我添加了一个使用装饰器的示例,可能更优雅一些(只是注意到我使用了一个类而不是MonsterRecipe的接口,但它的工作方式相同)。