Skip to content

Commit 3f3fb70

Browse files
committed
refactor(injector): implement support for nested bindings
1 parent 0b60f84 commit 3f3fb70

File tree

3 files changed

+15
-4
lines changed

3 files changed

+15
-4
lines changed

modules/di/src/injector.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ function _isWaiting(obj):bool {
2020

2121
export class Injector {
2222
constructor(bindings:List) {
23-
var flatten = _flattenBindings(bindings);
23+
var flatten = _flattenBindings(bindings, MapWrapper.create());
2424
this._bindings = this._createListOfBindings(flatten);
2525
this._instances = this._createInstances();
2626
this._parent = null; //TODO: vsavkin make a parameter
@@ -227,8 +227,7 @@ class _AsyncInjectorStrategy {
227227
}
228228

229229

230-
function _flattenBindings(bindings:List) {
231-
var res = {};
230+
function _flattenBindings(bindings:List, res:Map) {
232231
ListWrapper.forEach(bindings, function (b) {
233232
if (b instanceof Binding) {
234233
MapWrapper.set(res, b.key.id, b);
@@ -237,6 +236,9 @@ function _flattenBindings(bindings:List) {
237236
var s = bind(b).toClass(b);
238237
MapWrapper.set(res, s.key.id, s);
239238

239+
} else if (b instanceof List) {
240+
_flattenBindings(b, res);
241+
240242
} else if (b instanceof BindingBuilder) {
241243
throw new InvalidBindingError(b.token);
242244

modules/di/test/di/injector_spec.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,15 @@ export function main() {
133133
expect(car.engine).toBeAnInstanceOf(Engine);
134134
});
135135

136+
it("should flatten passed-in bindings", function () {
137+
var injector = new Injector([
138+
[[Engine, Car]]
139+
]);
140+
141+
var car = injector.get(Car);
142+
expect(car).toBeAnInstanceOf(Car);
143+
});
144+
136145
it('should use non-type tokens', function () {
137146
var injector = new Injector([
138147
bind('token').toValue('value')

modules/facade/src/collection.es6

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ export var Map = window.Map;
33
export var Set = window.Set;
44

55
export class MapWrapper {
6-
static create():HashMap { return new HashMap(); }
6+
static create():Map { return new Map(); }
77
static get(m, k) { return m[k]; }
88
static set(m, k, v) { m[k] = v; }
99
static contains(m, k) { return m[k] != undefined; }

0 commit comments

Comments
 (0)