angular-cn/modules/angular2/src/di/annotations.js

130 lines
2.2 KiB
JavaScript
Raw Normal View History

import {CONST} from "angular2/src/facade/lang";
/**
* A parameter annotation that creates a synchronous eager dependency.
*
* ```
* class AComponent {
* constructor(@Inject('aServiceToken') aService) {}
* }
* ```
*
*/
export class Inject {
token;
@CONST()
2014-10-07 10:34:07 -04:00
constructor(token) {
this.token = token;
}
}
/**
* A parameter annotation that creates an asynchronous eager dependency.
*
* ```
* class AComponent {
* constructor(@InjectPromise('aServiceToken') aServicePromise) {
* aServicePromise.then(aService => ...);
* }
* }
* ```
*
*/
2014-10-10 15:44:56 -04:00
export class InjectPromise {
token;
@CONST()
2014-10-07 10:34:07 -04:00
constructor(token) {
this.token = token;
}
2014-10-06 13:45:24 -04:00
}
/**
* A parameter annotation that creates a synchronous lazy dependency.
*
* ```
* class AComponent {
* constructor(@InjectLazy('aServiceToken') aServiceFn) {
* aService = aServiceFn();
* }
* }
* ```
*
*/
2014-10-06 13:45:24 -04:00
export class InjectLazy {
token;
2014-10-06 13:45:24 -04:00
@CONST()
2014-10-07 10:34:07 -04:00
constructor(token) {
2014-10-06 13:45:24 -04:00
this.token = token;
}
2014-10-09 12:09:50 -04:00
}
/**
* A parameter annotation that marks a dependency as optional.
*
* ```
* class AComponent {
* constructor(@Optional() dp:Dependency) {
* this.dp = dp;
* }
* }
* ```
*
*/
export class Optional {
@CONST()
constructor() {
}
}
/**
* `DependencyAnnotation` is used by the framework to extend DI.
*
* Only annotations implementing `DependencyAnnotation` will be added
* to the list of dependency properties.
*
* For example:
*
* ```
* class Parent extends DependencyAnnotation {}
* class NotDependencyProperty {}
*
* class AComponent {
* constructor(@Parent @NotDependencyProperty aService:AService) {}
* }
* ```
*
* will create the following dependency:
*
* ```
* new Dependency(Key.get(AService), [new Parent()])
* ```
*
* The framework can use `new Parent()` to handle the `aService` dependency
* in a specific way.
*
*/
export class DependencyAnnotation {
@CONST()
constructor() {
}
}
/**
* A class annotation that marks a class as available to `Injector`s for
* creation.
*
* ```
* class NeedsService {
* constructor(svc:UsefulService) {}
* }
*
* @Injectable
* class UsefulService {}
* ```
*/
export class Injectable {
@CONST()
constructor() {
}
}