Aurelia DI通过抽象基础和/或接口

时间:2017-02-09 12:34:35

标签: javascript typescript aurelia

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

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

例如,我有......

interface MonsterRecipe

class KoboldRecipe implements MonsterRecipe

class GoblinRecipe implements MonsterRecipe

这的第一部分是掌握一系列类来随机化。

我试过let allRecipes = container.getAll(MonsterRecipe),但它返回了0项。

我怀疑我可能需要一些明确的注册?

如果这完全是有缺陷的...... 当我要求MonsterRecipe时,有没有其他方法可以获得随机的GoblinRecipe或KoboldRecipe。

1 个答案:

答案 0 :(得分:1)

也许你可以明确地将它们放在一个数组中:

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";
    }
}