p.location-badge.
  exported from angular2/di
  defined in angular2/src/di/binding.ts (line 36)
:markdown
  Describes how the Injector should instantiate a given token.
  
  See bind.
  
  ## Example
  
  ```javascript
  var injector = Injector.resolveAndCreate([
    new Binding(String, { toValue: 'Hello' })
  ]);
  
  expect(injector.get(String)).toEqual('Hello');
  ```
  
  
.l-main-section
  h2 Annotations
  .l-sub-section
    h3.annotation CONST
    pre.prettyprint
      code.
        @CONST()
.l-main-section
  h2 Members
  .l-sub-section
    h3 constructor
    
    pre.prettyprint
      code.
        constructor(token: any, {toClass, toValue, toAlias, toFactory, deps}:
                  {toClass?: Type, toValue?: any, toAlias?: any, toFactory?: Function, deps?: List<any>})
    
    :markdown
      
      
  .l-sub-section
    h3 token
    
    :markdown
      Token used when retrieving this binding. Usually the `Type`.
      
      
  .l-sub-section
    h3 toClass
    
    :markdown
      Binds an interface to an implementation / subclass.
      
      
      
      Becuse `toAlias` and `toClass` are often confused, the example contains both use cases for easy
      comparison.
      
      ```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);
      ```
      
      
  .l-sub-section
    h3 toValue
    
    :markdown
      Binds a key to a value.
      
      
      
      ```javascript
      var injector = Injector.resolveAndCreate([
        new Binding(String, { toValue: 'Hello' })
      ]);
      
      expect(injector.get(String)).toEqual('Hello');
      ```
      
      
  .l-sub-section
    h3 toAlias
    
    :markdown
      Binds a key to the alias for an existing key.
      
      An alias means that Injector 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.
      
      
      
      Becuse `toAlias` and `toClass` are often confused the example contains both use cases for easy
      comparison.
      
      ```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);
      ```
      
      
  .l-sub-section
    h3 toFactory
    
    :markdown
      Binds a key to a function which computes the value.
      
      
      
      ```javascript
      var injector = Injector.resolveAndCreate([
        new Binding(Number, { toFactory: () => { return 1+2; }}),
        new Binding(String, { toFactory: (value) => { return "Value: " + value; },
                              dependencies: [Number] })
      ]);
      
      expect(injector.get(Number)).toEqual(3);
      expect(injector.get(String)).toEqual('Value: 3');
      ```
      
      
  .l-sub-section
    h3 dependencies
    
    :markdown
      Used in conjunction with `toFactory` and specifies a set of dependencies
      (as `token`s) which should be injected into the factory function.
      
      
      
      ```javascript
      var injector = Injector.resolveAndCreate([
        new Binding(Number, { toFactory: () => { return 1+2; }}),
        new Binding(String, { toFactory: (value) => { return "Value: " + value; },
                              dependencies: [Number] })
      ]);
      
      expect(injector.get(Number)).toEqual(3);
      expect(injector.get(String)).toEqual('Value: 3');
      ```
      
      
  .l-sub-section
    h3 resolve
    
    pre.prettyprint
      code.
        resolve()
    
    :markdown
      Converts the Binding into ResolvedBinding.
      
      Injector internally only uses ResolvedBinding, Binding contains
      convenience binding syntax.