parent
a80105f30a
commit
0c4fbfc8e2
|
@ -96,7 +96,7 @@ var car = child.get(Car); // uses the Car binding from the parent injector and E
|
||||||
|
|
||||||
## Bindings
|
## Bindings
|
||||||
|
|
||||||
You can bind to a class, a value, or a factory
|
You can bind to a class, a value, or a factory. It is also possible to alias existing bindings.
|
||||||
|
|
||||||
```
|
```
|
||||||
var inj = new Injector([
|
var inj = new Injector([
|
||||||
|
@ -128,6 +128,16 @@ var inj = new Injector([
|
||||||
]);
|
]);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If you want to alias an existing binding, you can do so using `toAlias`:
|
||||||
|
|
||||||
|
```
|
||||||
|
var inj = new Injector([
|
||||||
|
bind(Engine).toClass(Engine),
|
||||||
|
bind("engine!").toAlias(Engine)
|
||||||
|
]);
|
||||||
|
```
|
||||||
|
which implies `inj.get(Engine) === inj.get("engine!")`.
|
||||||
|
|
||||||
Note that tokens and factory functions are decoupled.
|
Note that tokens and factory functions are decoupled.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -60,6 +60,15 @@ export class BindingBuilder {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toAlias(aliasToken):Binding {
|
||||||
|
return new Binding(
|
||||||
|
Key.get(this.token),
|
||||||
|
(aliasInstance) => aliasInstance,
|
||||||
|
[new Dependency(Key.get(aliasToken), false, false, [])],
|
||||||
|
false
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
toFactory(factoryFunction:Function, dependencies:List = null):Binding {
|
toFactory(factoryFunction:Function, dependencies:List = null):Binding {
|
||||||
return new Binding(
|
return new Binding(
|
||||||
Key.get(this.token),
|
Key.get(this.token),
|
||||||
|
|
|
@ -128,6 +128,26 @@ export function main() {
|
||||||
expect(car.engine).toBeAnInstanceOf(Engine);
|
expect(car.engine).toBeAnInstanceOf(Engine);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should bind to an alias', function() {
|
||||||
|
var injector = new Injector([
|
||||||
|
Engine,
|
||||||
|
bind(SportsCar).toClass(SportsCar),
|
||||||
|
bind(Car).toAlias(SportsCar)
|
||||||
|
]);
|
||||||
|
|
||||||
|
var car = injector.get(Car);
|
||||||
|
var sportsCar = injector.get(SportsCar);
|
||||||
|
expect(car).toBeAnInstanceOf(SportsCar);
|
||||||
|
expect(car).toBe(sportsCar);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should throw when the aliased binding does not exist', function () {
|
||||||
|
var injector = new Injector([
|
||||||
|
bind('car').toAlias(SportsCar)
|
||||||
|
]);
|
||||||
|
expect(() => injector.get('car')).toThrowError('No provider for SportsCar! (car -> SportsCar)');
|
||||||
|
});
|
||||||
|
|
||||||
it('should support overriding factory dependencies', function () {
|
it('should support overriding factory dependencies', function () {
|
||||||
var injector = new Injector([
|
var injector = new Injector([
|
||||||
Engine,
|
Engine,
|
||||||
|
@ -324,4 +344,4 @@ export function main() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue