   isConfigured: false
   isStarted: false
 
-  @ERRORS:
-    injectorMissing: 'Instance of Space.Injector needed to initialize module.'
+  # An array of paths to classes that you want to become
+  # singletons in your application e.g: ['Space.messaging.EventBus']
+  # these are automatically mapped and created on `app.run()`
+  Singletons: []
 
   constructor: (properties) ->
     super properties

    if Meteor.isServer then @npm = Npm

    @injector.injectInto this
    @isInitialized = true
    @configure()
    @isConfigured = true

  configure: ->

  start: ->
    for moduleId in @RequiredModules
      module = @app.modules[moduleId]
      unless module.isStarted then module.start()
    if !@isStarted then @run()
    @isStarted = true

  run: ->

  @published = {}

  @publish: (module, identifier) ->

    if Space.Module.published[identifier]?

    else
      Space.Module.published[identifier] = module

  # Retrieve a module by indentifier
  @require: (requiredModule, requestingModule) ->

    module = Space.Module.published[requiredModule]
