70 lines
1.5 KiB
JavaScript
70 lines
1.5 KiB
JavaScript
import {MapWrapper} from 'angular2/src/facade/collection';
|
|
//import {int} from 'angular2/src/facade/lang';
|
|
|
|
// TODO: uncoment `int` once https://github.com/angular/angular/issues/1414 is fixed
|
|
|
|
/**
|
|
* A unique object used for retrieving items from the [Injector].
|
|
*
|
|
* [Key]s have:
|
|
* - a system-wide unique [id].
|
|
* - a [token], usually the [Type] of the instance.
|
|
*
|
|
* [Key]s are used internally in [Injector]s because their system-wide unique [id]s allow the
|
|
* injector to index in arrays rather than looking up items in maps.
|
|
*
|
|
* @exportedAs angular2/di
|
|
*/
|
|
export class Key {
|
|
token;
|
|
id/* :int */;
|
|
metadata:any;
|
|
constructor(token, id/* :int */) {
|
|
this.token = token;
|
|
this.id = id;
|
|
this.metadata = null;
|
|
}
|
|
|
|
/**
|
|
* Retrieves a [Key] for a token.
|
|
*/
|
|
static get(token):Key {
|
|
return _globalKeyRegistry.get(token);
|
|
}
|
|
|
|
/**
|
|
* @returns the number of [Key]s registered in the system.
|
|
*/
|
|
static get numberOfKeys()/* :int */ {
|
|
return _globalKeyRegistry.numberOfKeys;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
export class KeyRegistry {
|
|
_allKeys:Map;
|
|
constructor() {
|
|
this._allKeys = MapWrapper.create();
|
|
}
|
|
|
|
get(token):Key {
|
|
if (token instanceof Key) return token;
|
|
|
|
if (MapWrapper.contains(this._allKeys, token)) {
|
|
return MapWrapper.get(this._allKeys, token);
|
|
}
|
|
|
|
var newKey = new Key(token, Key.numberOfKeys);
|
|
MapWrapper.set(this._allKeys, token, newKey);
|
|
return newKey;
|
|
}
|
|
|
|
get numberOfKeys()/* :int */ {
|
|
return MapWrapper.size(this._allKeys);
|
|
}
|
|
}
|
|
|
|
var _globalKeyRegistry = new KeyRegistry();
|