From fed86fc8acc88eb29f0eb9ea9b97f50a1d06a843 Mon Sep 17 00:00:00 2001 From: vsavkin Date: Wed, 20 May 2015 13:46:55 -0700 Subject: [PATCH] feat(injector): support forwardRef in toAlias --- modules/angular2/src/di/binding.ts | 5 ++--- modules/angular2/src/di/forward_ref.dart | 2 +- modules/angular2/src/di/key.ts | 3 ++- modules/angular2/test/di/injector_spec.js | 8 ++++++++ 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/modules/angular2/src/di/binding.ts b/modules/angular2/src/di/binding.ts index c9d6c7ff92..1bfb27c699 100644 --- a/modules/angular2/src/di/binding.ts +++ b/modules/angular2/src/di/binding.ts @@ -236,8 +236,7 @@ export class Binding { resolvedDeps = _EMPTY_LIST; } - return new ResolvedBinding(Key.get(resolveForwardRef(this.token)), factoryFn, resolvedDeps, - isAsync); + return new ResolvedBinding(Key.get(this.token), factoryFn, resolvedDeps, isAsync); } } @@ -492,5 +491,5 @@ function _extractToken(typeOrFunc, annotations) { } function _createDependency(token, asPromise, lazy, optional, depProps): Dependency { - return new Dependency(Key.get(resolveForwardRef(token)), asPromise, lazy, optional, depProps); + return new Dependency(Key.get(token), asPromise, lazy, optional, depProps); } diff --git a/modules/angular2/src/di/forward_ref.dart b/modules/angular2/src/di/forward_ref.dart index 2fef206e9d..bfdee9d9ba 100644 --- a/modules/angular2/src/di/forward_ref.dart +++ b/modules/angular2/src/di/forward_ref.dart @@ -1,6 +1,6 @@ library angular2.di.forward_ref; -typedef Type ForwardRefFn(); +typedef dynamic ForwardRefFn(); /** * Dart does not have the forward ref problem, so this function is a noop. diff --git a/modules/angular2/src/di/key.ts b/modules/angular2/src/di/key.ts index fdc3d0d8e1..c1cd355eba 100644 --- a/modules/angular2/src/di/key.ts +++ b/modules/angular2/src/di/key.ts @@ -1,6 +1,7 @@ import {MapWrapper} from 'angular2/src/facade/collection'; import {stringify, CONST, Type, isBlank, BaseException} from 'angular2/src/facade/lang'; import {TypeLiteral} from './type_literal'; +import {resolveForwardRef} from './forward_ref'; export {TypeLiteral} from './type_literal'; @@ -38,7 +39,7 @@ export class Key { /** * Retrieves a `Key` for a token. */ - static get(token): Key { return _globalKeyRegistry.get(token); } + static get(token): Key { return _globalKeyRegistry.get(resolveForwardRef(token)); } /** * @returns the number of keys registered in the system. diff --git a/modules/angular2/test/di/injector_spec.js b/modules/angular2/test/di/injector_spec.js index 6b26a21c90..c88c7667be 100644 --- a/modules/angular2/test/di/injector_spec.js +++ b/modules/angular2/test/di/injector_spec.js @@ -162,6 +162,14 @@ export function main() { expect(() => injector.get('car')).toThrowError('No provider for SportsCar! (car -> SportsCar)'); }); + it('should handle forwardRef in toAlias', function () { + var injector = Injector.resolveAndCreate([ + bind('originalEngine').toClass(forwardRef(() => Engine)), + bind('aliasedEngine').toAlias(forwardRef(() => 'originalEngine')) + ]); + expect(injector.get('aliasedEngine')).toBeAnInstanceOf(Engine); + }); + it('should support overriding factory dependencies', function () { var injector = Injector.resolveAndCreate([ Engine,