   addProvider: (name, provider) -> @_providers[name] = provider
 
   _mapDependencies: (value, deps={}) ->
-
     Class = value.constructor ? null
     SuperClass = Class.__super__ ? null
-
     # Recurse down the prototype chain
     if SuperClass? then @_mapDependencies SuperClass.constructor::, deps
-
     # Add dependencies of current value
     deps[key] = id for key, id of value.Dependencies
-
     return deps
 
 # ========= PRIVATE CLASSES ========== #

    @_providers = providers ? Injector.DEFAULT_PROVIDERS

  map: (id, override) ->

    if not id? then throw new Error 'Cannot map undefined value.'

    # Avoid accidential override of existing mapping
    if @_mappings[id]? and !override
      throw new Error "A mapping for <#{id}> already exists."

    @_mappings[id] = new Mapping id, @_providers

  override: (id) -> @map id, true

  remove: (id) -> delete @_mappings[id]

  get: (id) ->
    # Provide nice error message if a mapping wasn't found
    if not @_mappings[id]?
      throw new Error "No mapping for identifier <#{id}> was found."
    dependency = @_mappings[id].provide()
    @injectInto dependency
    return dependency
