Angular 2 di容器

时间:2015-05-27 12:36:02

标签: javascript dependency-injection typescript angular

我实际上正在研究Angular 2,我想知道团队如何处理其组件中的依赖注入?

解释

似乎Ng2基于Type7的ES7装饰器。事实上,班级设计师是#34;发射" (我的意思是,装饰器的代码)仅在类实例化时才被解释。

那么,团队如何处理组件/服务注入?

示例

从文档中查看此代码:

class AComponent {
  constructor(@Inject(MyService) aService:MyService) {}
}

在调用类的构造函数时进行注入。这意味着MyService有一定的装饰器/特定元数据(如@Injectable),允许他注入不?

在这种情况下,它意味着有一个服务注册表,可以通过@Inject注释访问它们的列表。

但这意味着框架能够在运行时(这是重要的单词)中创建和加载此存储库,它与装饰器调用不匹配(在类的实例化时)注释)?

这是否意味着每个可注射的组件/服务至少会被实例化一次?或者它是否存在其他东西在运行时注入或执行一些装饰器来填充服务注册表/容器?

感谢您提前

1 个答案:

答案 0 :(得分:2)

  

事实上,班级设计师正在推出" (我的意思是,装饰器的代码)仅在类实例化时才被解释。

喷油器是的。但Component没有,这就是你所缺少的一块拼图。

declare var Component: any;
declare var Inject: any;
declare type MyService = any;
declare var MyService: any;

@Component
class AComponent {
  constructor(@Inject(MyService) aService:MyService) {}
}

@Component调用将在definition时进行。这将允许角度来注册组件。当有人要求所述组件时,构造函数@Inject将执行,因此角度DI将启动。