Joh*_*son 15 javascript dependency-injection aurelia
我已经浏览了Aurelia DI的文档并查看了源代码并希望分享我想要实现的内容,这样如果我遗漏了一些明显的东西,我就会被击落.我已经在这里查看了Aurelia的TS 示例,但我看不出它是如何工作的,而且缺少文档.
我想要的是:
dataProvider.js(数据提供者接口)
export interface DataProvider {
getData(): number;
}
Run Code Online (Sandbox Code Playgroud)
itemDisplayer1.js(将使用实现接口的注入类的类)
import {inject} from 'aurelia-framework';
import {DataProvider} from './dataProvider';
@inject(DataProvider)
export class itemDisplayer1 {
constructor(public dataProvider: DataProvider) {
this.dataProvider = dataProvider;
this.data = dataProvider.getData();
}
}
Run Code Online (Sandbox Code Playgroud)
itemDisplayer2.js(另一个将使用实现接口的注入类的类)
import {inject} from 'aurelia-framework';
import {DataProvider} from './dataProvider';
@inject(DataProvider)
export class itemDisplayer2 {
constructor(public dataProvider: DataProvider) {
this.dataProvider = dataProvider;
this.data = dataProvider.getData();
}
}
Run Code Online (Sandbox Code Playgroud)
GoodDataProvider.js
import {DataProvider} from "./dataProvider";
export class GoodDataProvider implements DataProvider {
data = 1;
getData() {
return this.data;
}
}
Run Code Online (Sandbox Code Playgroud)
BetterDataProvider.js
import {DataProvider} from "./dataProvider";
export class BetterDataProvider implements DataProvider {
data = 2;
getData() {
return this.data;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在某处(?)我想配置itemDisplayer1应该提供GoodDataProvider的实例,而itemDisplayer2应该提供BetterDataProvider(1)的实例.
然后是DI上下文的问题.我不知道如何使用container.createChild().我找不到太多关于它的信息.它创建一个子容器,它将在需要时委托给父容器,但是如果我创建了2个子容器并为每个子容器注册了2个提供者之一,那么itemDisplayer类将如何知道要使用哪个(不更改其定义)并注入父容器等)?
注意:生命周期管理信息不存在于消费者或依赖关系的提供者中(这通常在Aurelia DI示例中完成,似乎有点制造).我希望能够在消费者和提供者关联时定义这一点 - 在上面指出"(1)".
总之,这可能吗?这是近期未来的事情吗?我是否应该尝试用满足我需求的定制容器替换Aurelia DI?
(我试图这样做的原因是,为了评估js框架,框架需要演示一个成熟的DI系统,其中包含生命周期管理/ AOP等功能作为标准之一)
来自@eisenbergeffect:一旦我们得到基准,DI就会得到一些内部改革.
但是在相关的说明中,它不能用于接口,因为TypeScript在运行时编译它们.
在DI容器中注册不同类型时,必须提供唯一键,然后在@Inject(xxx)语句中指定相应的唯一键.钥匙可以是你喜欢的任何东西.通常人们会将类型本身用于唯一键(这会导致一些混淆),但您可以使用字符串,数字或其他任何您喜欢的内容.
单元测试也提供信息:https://github.com/aurelia/dependency-injection/blob/master/test/container.spec.js
| 归档时间: |
|
| 查看次数: |
2047 次 |
| 最近记录: |