feat(di): add OpaqueToken to DI

Using `new Object()` as a token causes cryptic errors. OpaqueToken class should be used instead.
This commit is contained in:
vsavkin 2014-11-25 18:52:42 -08:00
parent 6187b80ce6
commit 6f889e3094
3 changed files with 21 additions and 9 deletions

View File

@ -1,4 +1,4 @@
import {Injector, bind} from 'di/di'; import {Injector, bind, OpaqueToken} from 'di/di';
import {Type, FIELD, isBlank, isPresent, BaseException} from 'facade/lang'; import {Type, FIELD, isBlank, isPresent, BaseException} from 'facade/lang';
import {DOM, Element} from 'facade/dom'; import {DOM, Element} from 'facade/dom';
import {Compiler} from './compiler/compiler'; import {Compiler} from './compiler/compiler';
@ -21,11 +21,11 @@ var _rootBindings = [
bind(Reflector).toValue(reflector), Compiler, TemplateLoader, DirectiveMetadataReader, Parser, Lexer bind(Reflector).toValue(reflector), Compiler, TemplateLoader, DirectiveMetadataReader, Parser, Lexer
]; ];
export var appViewToken = new Object(); export var appViewToken = new OpaqueToken('AppView');
export var appWatchGroupToken = new Object(); export var appRecordRangeToken = new OpaqueToken('AppRecordRange');
export var appElementToken = new Object(); export var appElementToken = new OpaqueToken('AppElement');
export var appComponentAnnotatedTypeToken = new Object(); export var appComponentAnnotatedTypeToken = new OpaqueToken('AppComponentAnnotatedType');
export var appDocumentToken = new Object(); export var appDocumentToken = new OpaqueToken('AppDocument');
// Exported only for tests that need to overwrite default document binding. // Exported only for tests that need to overwrite default document binding.
export function documentDependentBindings(appComponentType) { export function documentDependentBindings(appComponentType) {
@ -59,10 +59,10 @@ export function documentDependentBindings(appComponentType) {
}); });
}, [Compiler, Injector, appElementToken, appComponentAnnotatedTypeToken]), }, [Compiler, Injector, appElementToken, appComponentAnnotatedTypeToken]),
bind(appWatchGroupToken).toFactory((rootView) => rootView.recordRange, bind(appRecordRangeToken).toFactory((rootView) => rootView.recordRange,
[appViewToken]), [appViewToken]),
bind(ChangeDetector).toFactory((appWatchGroup) => bind(ChangeDetector).toFactory((appRecordRange) =>
new ChangeDetector(appWatchGroup), [appWatchGroupToken]) new ChangeDetector(appRecordRange), [appRecordRangeToken])
]; ];
} }

View File

@ -4,3 +4,4 @@ export * from './binding';
export * from './key'; export * from './key';
export * from './module'; export * from './module';
export * from './exceptions'; export * from './exceptions';
export * from './opaque_token';

View File

@ -0,0 +1,11 @@
export class OpaqueToken {
_desc:string;
constructor(desc:string){
this._desc = `Token(${desc})`;
}
toString() {
return this._desc;
}
}