Javascript Aurelia DI通过抽象基和或接口获取类的实例
我知道这可能超出了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),
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的接口,但它的工作方式相同)。