     @_readModelInstances = {}
 
 
-
-  ###*
-  * @name initialize
-  *
-  * @description
-  * Use as: initialize(callback)
-  *
-  * Initializes the `BoundedContext` after the `add*` Methods
-  *
-  * @example
-    ```javascript
-    exampleContext.initialize(function() {
-      // ...
-    })
-    ```
-  ###
-  initialize: ->
-    @_initializeStore()
-    @_initializeReadModels()
-    @_initializeAdapters()
-
-    @_domainEventService = new DomainEventService
-    @_domainEventService.initialize @_store, @
-    @_initializeDomainEventHandlers()
-
-    @_aggregateService = new AggregateService
-    @_aggregateService.initialize @_store, @_domainEventService, @
-    @_initializeAggregateService()
-
-    @_di =
-      $aggregate: @_aggregateService
-      $adapter: => @getAdapter.apply @, arguments
-      $readmodel: => @getReadModel.apply @, arguments
-    @
-
-
-  _initializeReadModels: ->
-    for readModelName, ReadModelClass of @_readModelClasses
-      @_initializeReadModel readModelName, ReadModelClass
-
-
-  _initializeReadModel: (readModelName, ReadModelClass) ->
-    @_store.collection "#{@name}.ReadModel.#{readModelName}", (err, collection) =>
-      readModel = new ReadModelClass
-      # TODO: change the injected variable name to "$mongodb, $mysql etc" (@_store.name)
-      readModel.$store = collection
-      readModel.$adapter = => @getAdapter.apply @, arguments
-      if readModel.subscribeToDomainEvents
-        for eventName in readModel.subscribeToDomainEvents
-          @_subscribeReadModelToDomainEvent readModel, eventName
-
-      @_readModelInstances[readModelName] = readModel
-
-
-  _subscribeReadModelToDomainEvent: (readModel, eventName) ->
-    @addDomainEventHandler eventName, (domainEvent) =>
-      @_applyDomainEventToReadModel domainEvent, readModel
-
-
-  _applyDomainEventToReadModel: (domainEvent, readModel) ->
-    if !readModel["handle#{domainEvent.name}"]
-      throw new Error "Tried to apply DomainEvent '#{domainEvent.name}' to ReadModel without a matching handle method"
-
-    else
-      readModel["handle#{domainEvent.name}"] domainEvent
-
-
-  _initializeAdapters: ->
-    for adapterName, adapterClass of @_adapterClasses
-      adapter = new @_adapterClasses[adapterName]
-      adapter.initialize?()
-
-      @_adapterInstances[adapterName] = adapter
-
-
-  _initializeStore: ->
-    if @_params.store
-      @_store = @_params.store
-    else
-      globalStore = eventric.get 'store'
-      if globalStore
-        @_store = globalStore
-      else
-        throw new Error 'Missing Event Store for Bounded Context'
-
-
-  _initializeDomainEventHandlers: ->
-    for domainEventName, fnArray of @_domainEventHandlers
-      for fn in fnArray
-        @_domainEventService.on domainEventName, fn
-
-
-  _initializeAggregateService: ->
-    for aggregateName, AggregateRoot of @_aggregateRootClasses
-      @_aggregateService.registerAggregateRoot aggregateName, AggregateRoot
-
-
   ###*
   * @name set
   *

    @


  getReadModel: (readModelName) ->
    @_readModelInstances[readModelName]


  getAdapter: (adapterName) ->
    @_adapterInstances[adapterName]


  getDomainEvent: (domainEventName) ->
    @_domainEventClasses[domainEventName]


    @


  ###*
  *
  * @name addAdapter
  *
  * @description
  * Use as: addAdapter(adapterName, AdapterClass)
  *
  * Add adapter which get can be used inside of `CommandHandlers`
  *
  * @example
    ```javascript
    exampleContext.addAdapter('SomeAdapter', function() {
      // ...
    });
    ```
  *
  * @param {String} adapterName Name of Adapter
  *
  * @param {Function} Adapter Class
  ###
  addAdapter: (adapterName, adapterClass) ->
    @_adapterClasses[adapterName] = adapterClass
    @
