 configure = (configuration) ->
 
   class Configuration
+
     constructor: (properties = {}) ->
       @[key] = val for own key,val of properties
 
     require: (name) ->
       require name
 
+    assign: (target, sources...) ->
+      sources.forEach (source) ->
+        target[key] = value for own key, value of source
+      return target
+
+    createEventEmitter: ->
+      new (@require("events").EventEmitter)
+
+    createObject: (args...) ->
+      Object.create args...
+
+    defineProperty: (args...) ->
+      Object.defineProperty args...
+
+    defineProperties: (args...) ->
+      Object.defineProperties args...
+
     createPromise: (resolver) ->
       @require("when").promise resolver
 

    configure: configure
    Configuration: Configuration
    CustomError: CustomError
    ComponentUndefined: ComponentUndefined
    ComponentDependenciesUndefined: ComponentDependenciesUndefined
    ComponentCyclic: ComponentCyclic
    Dictionary: Dictionary
    Components: Components
    Promises: Promises
    Container: Container
    Component: Component

module.exports = configure()

      catch error then done error

  class Component

    constructor: (properties = {}) ->
      _dependencies = properties.dependencies?.slice() ? []
      _factory = properties.factory

      $.defineProperties @,
        dependencies:
          enumerable: true, get: -> _dependencies.slice()
        factory:
          enumerable: true, get: -> _factory

    resolveDependencies: (container, done) ->
      resolveComponent = container.resolveComponent.bind container
