feat(di): changed toFactory to support dependency annotations
This commit is contained in:
parent
863eb3c559
commit
f210c41c1f
|
@ -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];
|
||||||
|
|
||||||
|
|
|
@ -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()]);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue