File: matzdi_constructor.rb

Project: MATZ-DI: Matz's Dependency Injection

# Matz DI -- Constructor Injection
#
# Usage:
#
#   def start_app
#     c = DI::Container.new
#     c.register(:blog, Blog, :input, :display)
#     c.register(:input, Input)
#     c.register(:dbms, DBMS)
#     c.register(:markup, Markup)
#     c.register(:plugin, Plugin, :dbms)
#     c.register(:display, Display, :dbms, :markup, :plugin)
#     blog = c.instance(:blog)
#   end

module DI
  class Container
    def initialize
      @services = {}
      @instances = {}
    end
    def register(name, component, *dependency)
      @services[name] = [component, dependency]
    end
    def instance(name)
      return @instances[name] if @instances[name]
      component, dependency = @services[name]
      args = dependency.map {|service|
        self.instance(service)
      }
      @instances[name] = component.new(*args)
    end
  end
end


[ Index ][ Presentation ]
Generated by [ source2html ]