feat(di): changed toFactory to support dependency annotations

This commit is contained in:
vsavkin 2015-05-21 08:34:48 -07:00
parent 863eb3c559
commit f210c41c1f
2 changed files with 18 additions and 3 deletions

View File

@ -431,8 +431,7 @@ export class BindingBuilder {
function _constructDependencies(factoryFunction: Function, dependencies: List<any>) { function _constructDependencies(factoryFunction: Function, dependencies: List<any>) {
return isBlank(dependencies) ? return isBlank(dependencies) ?
_dependenciesFor(factoryFunction) : _dependenciesFor(factoryFunction) :
ListWrapper.map(dependencies, ListWrapper.map(dependencies, (t) => _extractToken(factoryFunction, t));
(t) => Dependency.fromKey(Key.get(resolveForwardRef(t))));
} }
function _dependenciesFor(typeOrFunc): List<any> { function _dependenciesFor(typeOrFunc): List<any> {
@ -451,6 +450,10 @@ function _extractToken(typeOrFunc, annotations) {
var lazy = false; var lazy = false;
var asPromise = false; var asPromise = false;
if (!ListWrapper.isList(annotations)) {
return _createDependency(annotations, asPromise, lazy, optional, depProps);
}
for (var i = 0; i < annotations.length; ++i) { for (var i = 0; i < annotations.length; ++i) {
var paramAnnotation = annotations[i]; var paramAnnotation = annotations[i];

View File

@ -1,8 +1,10 @@
import {isBlank, BaseException} from 'angular2/src/facade/lang'; import {isBlank, BaseException} from 'angular2/src/facade/lang';
import {describe, ddescribe, it, iit, expect, beforeEach} from 'angular2/test_lib'; import {describe, ddescribe, it, iit, expect, beforeEach} from 'angular2/test_lib';
import {Injector, bind, ResolvedBinding, Key, forwardRef} from 'angular2/di'; import {Injector, bind, ResolvedBinding, Key, forwardRef, DependencyAnnotation} from 'angular2/di';
import {Optional, Inject, InjectLazy} from 'angular2/src/di/annotations_impl'; import {Optional, Inject, InjectLazy} from 'angular2/src/di/annotations_impl';
class CustomDependencyAnnotation extends DependencyAnnotation {
}
class Engine { class Engine {
} }
@ -408,6 +410,16 @@ export function main() {
expect(stringBinding.dependencies[0].key).toEqual(Key.get(Engine)); expect(stringBinding.dependencies[0].key).toEqual(Key.get(Engine));
expect(dashboardSoftwareBinding.dependencies[0].key).toEqual(Key.get(BrokenEngine)); expect(dashboardSoftwareBinding.dependencies[0].key).toEqual(Key.get(BrokenEngine));
}); });
it('should support overriding factory dependencies with dependency annotations', function () {
var bindings = Injector.resolve([
bind("token").toFactory((e) => "result", [[new Inject("dep"), new CustomDependencyAnnotation()]])
]);
var binding = bindings[Key.get("token").id];
expect(binding.dependencies[0].key).toEqual(Key.get("dep"));
expect(binding.dependencies[0].properties).toEqual([new CustomDependencyAnnotation()]);
});
}); });
}); });
} }