据我所知,这可能超出了Aurelia的DI容器的范围,但可能不是。
我希望能够随机返回从接口继承的任何类的实例。
例如,我有......
interface MonsterRecipe
class KoboldRecipe implements MonsterRecipe
class GoblinRecipe implements MonsterRecipe
这的第一部分是掌握一系列类来随机化。
我试过let allRecipes = container.getAll(MonsterRecipe)
,但它返回了0项。
我怀疑我可能需要一些明确的注册?
如果这完全是有缺陷的......
当我要求MonsterRecipe
时,有没有其他方法可以获得随机的GoblinRecipe或KoboldRecipe。
答案 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";
}
}