Class: Corindon::DependencyInjection::Container
- Inherits:
-
Object
- Object
- Corindon::DependencyInjection::Container
- Defined in:
- lib/corindon/dependency_injection/container.rb
Instance Attribute Summary collapse
-
#id_generator ⇒ Object
readonly
Returns the value of attribute id_generator.
-
#injector ⇒ Object
readonly
Returns the value of attribute injector.
Instance Method Summary collapse
- #add_definition(klass, id: nil, anonymous: false, &block) ⇒ String
- #get(key) ⇒ Object
- #has?(key) ⇒ Boolean
-
#initialize(id_generator: Id::UuidGenerator.new) ⇒ Container
constructor
A new instance of Container.
- #parameter(key) ⇒ Object
- #parameter?(key) ⇒ Boolean
- #set_parameter(name, value) ⇒ Object
- #tagged(tag) ⇒ Array<String>
Constructor Details
#initialize(id_generator: Id::UuidGenerator.new) ⇒ Container
Returns a new instance of Container.
12 13 14 15 16 17 18 19 20 |
# File 'lib/corindon/dependency_injection/container.rb', line 12 def initialize(id_generator: Id::UuidGenerator.new) @id_generator = id_generator @services = {} @definitions = {} @parameters = {} = Hash.new { |hash, key| hash[key] = [] } @injector = Injector.new(container: self) end |
Instance Attribute Details
#id_generator ⇒ Object (readonly)
Returns the value of attribute id_generator.
8 9 10 |
# File 'lib/corindon/dependency_injection/container.rb', line 8 def id_generator @id_generator end |
#injector ⇒ Object (readonly)
Returns the value of attribute injector.
9 10 11 |
# File 'lib/corindon/dependency_injection/container.rb', line 9 def injector @injector end |
Instance Method Details
#add_definition(klass, id: nil, anonymous: false, &block) ⇒ String
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/corindon/dependency_injection/container.rb', line 24 def add_definition(klass, id: nil, anonymous: false, &block) definition = if injectable?(klass) klass.definition elsif block.sth? Dsl.new(klass).exec(&block) else Definition.new(klass) end # Generate an id if set to anonymous when registering # If a definition is set to be anonymous but an id is provided zhen registering, use this id instead< if anonymous || (definition.anonymous? && id.nil?) id = id_generator.generate end id = id || definition.id || to_id(klass) definitions[id] = definition definition..each { |tag| [tag] << id } id end |
#get(key) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/corindon/dependency_injection/container.rb', line 65 def get(key) id = to_id(key) if has?(key) services.fetch(id) { build_service(id) } elsif injectable?(key) key.definition.build(injector) else raise StandardError.new("No service #{id}") end end |
#has?(key) ⇒ Boolean
59 60 61 |
# File 'lib/corindon/dependency_injection/container.rb', line 59 def has?(key) definitions.key?(to_id(key)) end |
#parameter(key) ⇒ Object
91 92 93 |
# File 'lib/corindon/dependency_injection/container.rb', line 91 def parameter(key) parameters.fetch(to_id(key)) end |
#parameter?(key) ⇒ Boolean
85 86 87 |
# File 'lib/corindon/dependency_injection/container.rb', line 85 def parameter?(key) parameters.key?(to_id(key)) end |
#set_parameter(name, value) ⇒ Object
79 80 81 |
# File 'lib/corindon/dependency_injection/container.rb', line 79 def set_parameter(name, value) parameters[to_id(name)] = value end |
#tagged(tag) ⇒ Array<String>
48 49 50 51 52 53 54 55 |
# File 'lib/corindon/dependency_injection/container.rb', line 48 def tagged(tag) if .key?(tag) .fetch(tag) else [] end end |