2015-04-19 13:53:18 -07:00
2015-04-22 08:06:51 -07:00
p.location-badge.
2015-06-01 22:51:00 -07:00
exported from <a href='../di'>angular2/di</a>
defined in <a href="https://github.com/angular/angular/tree/master/modules/angular2/src/di/binding.ts#L25-L246">angular2/src/di/binding.ts (line 25)</a>
2015-04-19 13:53:18 -07:00
:markdown
2015-04-26 08:01:04 -07:00
Describes how the <a href='Injector-class.html'><code>Injector</code></a> should instantiate a given token.
2015-04-19 13:53:18 -07:00
2015-04-26 08:01:04 -07:00
See <a href='bind-function.html'><code>bind</code></a>.
2015-04-19 13:53:18 -07:00
## Example
```javascript
var injector = Injector.resolveAndCreate([
new Binding(String, { toValue: 'Hello' })
]);
expect(injector.get(String)).toEqual('Hello');
```
.l-main-section
h2 Members
.l-sub-section
h3 constructor
pre.prettyprint
code.
2015-06-01 22:51:00 -07:00
constructor(token, {toClass, toValue, toAlias, toFactory, toAsyncFactory, deps}: {
toClass?: Type,
toValue?: any,
toAlias?: any,
toFactory?: Function,
toAsyncFactory?: Function,
deps?: List<any>
})
2015-04-19 13:53:18 -07:00
:markdown
2015-06-01 22:51:00 -07:00
2015-04-19 13:53:18 -07:00
.l-sub-section
h3 dependencies
:markdown
2015-05-01 06:37:29 -07:00
2015-06-01 22:51:00 -07:00
Used in conjunction with `toFactory` or `toAsyncFactory` and specifies a set of dependencies
(as `token`s) which should be injected into the factory function.
2015-04-19 13:53:18 -07:00
```javascript
var injector = Injector.resolveAndCreate([
new Binding(Number, { toFactory: () => { return 1+2; }}),
new Binding(String, { toFactory: (value) => { return "Value: " + value; },
2015-06-01 22:51:00 -07:00
dependencies: [Number] })
2015-04-19 13:53:18 -07:00
]);
expect(injector.get(Number)).toEqual(3);
expect(injector.get(String)).toEqual('Value: 3');
```
2015-06-01 22:51:00 -07:00
2015-04-19 13:53:18 -07:00
.l-sub-section
h3 resolve
pre.prettyprint
code.
2015-04-20 13:57:43 -07:00
resolve()
2015-04-19 13:53:18 -07:00
:markdown
2015-05-01 06:37:29 -07:00
2015-04-26 08:01:04 -07:00
Converts the <a href='Binding-class.html'><code>Binding</code></a> into <a href='ResolvedBinding-class.html'><code>ResolvedBinding</code></a>.
2015-04-19 13:53:18 -07:00
2015-06-01 22:51:00 -07:00
<a href='Injector-class.html'><code>Injector</code></a> internally only uses <a href='ResolvedBinding-class.html'><code>ResolvedBinding</code></a>, <a href='Binding-class.html'><code>Binding</code></a> contains
convenience binding syntax.
2015-04-19 13:53:18 -07:00
.l-sub-section
h3 toAlias
:markdown
2015-05-01 06:37:29 -07:00
2015-04-20 13:57:43 -07:00
Binds a key to the alias for an existing key.
2015-04-19 13:53:18 -07:00
2015-06-01 22:51:00 -07:00
An alias means that <a href='Injector-class.html'><code>Injector</code></a> returns the same instance as if the alias token was used.
This is in contrast to `toClass` where a separate instance of `toClass` is returned.
2015-04-19 13:53:18 -07:00
2015-06-01 22:51:00 -07:00
Becuse `toAlias` and `toClass` are often confused the example contains both use cases for easy
comparison.
2015-04-19 13:53:18 -07:00
```javascript
class Vehicle {}
class Car extends Vehicle {}
var injectorAlias = Injector.resolveAndCreate([
Car,
new Binding(Vehicle, { toAlias: Car })
]);
var injectorClass = Injector.resolveAndCreate([
Car,
new Binding(Vehicle, { toClass: Car })
]);
expect(injectorAlias.get(Vehicle)).toBe(injectorAlias.get(Car));
expect(injectorAlias.get(Vehicle) instanceof Car).toBe(true);
expect(injectorClass.get(Vehicle)).not.toBe(injectorClass.get(Car));
expect(injectorClass.get(Vehicle) instanceof Car).toBe(true);
```
2015-06-01 22:51:00 -07:00
2015-04-19 13:53:18 -07:00
.l-sub-section
h3 toAsyncFactory
:markdown
2015-05-01 06:37:29 -07:00
2015-04-20 13:57:43 -07:00
Binds a key to a function which computes the value asynchronously.
2015-04-19 13:53:18 -07:00
```javascript
var injector = Injector.resolveAndCreate([
new Binding(Number, { toAsyncFactory: () => {
return new Promise((resolve) => resolve(1 + 2));
}}),
new Binding(String, { toFactory: (value) => { return "Value: " + value; },
2015-06-01 22:51:00 -07:00
dependencies: [Number]})
2015-04-19 13:53:18 -07:00
]);
injector.asyncGet(Number).then((v) => expect(v).toBe(3));
injector.asyncGet(String).then((v) => expect(v).toBe('Value: 3'));
```
2015-06-01 22:51:00 -07:00
The interesting thing to note is that event though `Number` has an async factory, the `String`
factory function takes the resolved value. This shows that the <a href='Injector-class.html'><code>Injector</code></a> delays
executing the
`String` factory
until after the `Number` is resolved. This can only be done if the `token` is retrieved using
the `asyncGet` API in the <a href='Injector-class.html'><code>Injector</code></a>.
2015-04-19 13:53:18 -07:00
.l-sub-section
h3 toClass
:markdown
2015-05-01 06:37:29 -07:00
2015-04-20 13:57:43 -07:00
Binds an interface to an implementation / subclass.
2015-04-19 13:53:18 -07:00
2015-06-01 22:51:00 -07:00
Becuse `toAlias` and `toClass` are often confused, the example contains both use cases for easy
comparison.
2015-04-19 13:53:18 -07:00
```javascript
class Vehicle {}
class Car extends Vehicle {}
var injectorClass = Injector.resolveAndCreate([
Car,
new Binding(Vehicle, { toClass: Car })
]);
var injectorAlias = Injector.resolveAndCreate([
Car,
new Binding(Vehicle, { toAlias: Car })
]);
expect(injectorClass.get(Vehicle)).not.toBe(injectorClass.get(Car));
expect(injectorClass.get(Vehicle) instanceof Car).toBe(true);
expect(injectorAlias.get(Vehicle)).toBe(injectorAlias.get(Car));
expect(injectorAlias.get(Vehicle) instanceof Car).toBe(true);
```
2015-06-01 22:51:00 -07:00
2015-04-19 13:53:18 -07:00
.l-sub-section
h3 toFactory
:markdown
2015-05-01 06:37:29 -07:00
2015-04-20 13:57:43 -07:00
Binds a key to a function which computes the value.
2015-04-19 13:53:18 -07:00
```javascript
var injector = Injector.resolveAndCreate([
new Binding(Number, { toFactory: () => { return 1+2; }}),
new Binding(String, { toFactory: (value) => { return "Value: " + value; },
2015-06-01 22:51:00 -07:00
dependencies: [Number] })
2015-04-19 13:53:18 -07:00
]);
expect(injector.get(Number)).toEqual(3);
expect(injector.get(String)).toEqual('Value: 3');
```
2015-06-01 22:51:00 -07:00
2015-04-19 13:53:18 -07:00
.l-sub-section
h3 toValue
:markdown
2015-05-01 06:37:29 -07:00
2015-04-20 13:57:43 -07:00
Binds a key to a value.
2015-04-19 13:53:18 -07:00
```javascript
var injector = Injector.resolveAndCreate([
new Binding(String, { toValue: 'Hello' })
]);
expect(injector.get(String)).toEqual('Hello');
```
2015-06-01 22:51:00 -07:00
2015-04-19 13:53:18 -07:00
.l-sub-section
h3 token
:markdown
2015-05-01 06:37:29 -07:00
2015-04-20 13:57:43 -07:00
Token used when retrieving this binding. Usually the `Type`.
2015-06-01 22:51:00 -07:00
2015-04-19 13:53:18 -07:00