Class: Corindon::DependencyInjection::Container
- Inherits:
-
Object
- Object
- Corindon::DependencyInjection::Container
- Defined in:
- lib/corindon/dependency_injection/container.rb
Instance Attribute Summary collapse
-
#injector ⇒ Object
readonly
Returns the value of attribute injector.
Instance Method Summary collapse
- #add_definition(def_or_injectable, context: {}, &block) ⇒ String
- #as_definition(def_or_injectable) ⇒ Definition
-
#clear ⇒ Object
Clears all the cache of services.
- #dup ⇒ Container
- #get(key) ⇒ Object
- #has?(key) ⇒ Boolean
-
#initialize(definitions: [], parameters: {}, service_built_listeners: []) ⇒ Container
constructor
A new instance of Container.
- #on_service_built(listener) ⇒ Object
- #parameter(key) ⇒ Object
- #parameter?(key) ⇒ Boolean
- #set_parameter(name, value) ⇒ Object
- #tagged(tag) ⇒ Array<String>
Constructor Details
#initialize(definitions: [], parameters: {}, service_built_listeners: []) ⇒ Container
Returns a new instance of Container.
11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/corindon/dependency_injection/container.rb', line 11 def initialize(definitions: [], parameters: {}, service_built_listeners: []) @services = {} @definitions = {} @parameters = parameters @tags = Hash.new { |hash, key| hash[key] = [] } @injector = Injector.new(container: self) definitions.each { |d| register_definition(d) } @service_built_listeners = service_built_listeners end |
Instance Attribute Details
#injector ⇒ Object (readonly)
Returns the value of attribute injector.
8 9 10 |
# File 'lib/corindon/dependency_injection/container.rb', line 8 def injector @injector end |
Instance Method Details
#add_definition(def_or_injectable, context: {}, &block) ⇒ String
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/corindon/dependency_injection/container.rb', line 49 def add_definition(def_or_injectable, context: {}, &block) definition = as_definition(def_or_injectable) if block.sth? definition = Dsl.from_definition(definition).exec(context: context, &block) end id = definition.id || to_id(def_or_injectable) register_definition( Definition.new( definition.object_source, id: id, args: definition.args, kwargs: definition.kwargs, calls: definition.calls, tags: definition. ) ) id end |
#as_definition(def_or_injectable) ⇒ Definition
35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/corindon/dependency_injection/container.rb', line 35 def as_definition(def_or_injectable) if def_or_injectable.is_a?(Definition) def_or_injectable elsif def_or_injectable.is_a?(Injectable) def_or_injectable.definition elsif def_or_injectable.is_a?(Class) Definition.new(def_or_injectable) else raise StandardError.new("Don't know how to build #{def_or_injectable}") end end |
#clear ⇒ Object
Clears all the cache of services
90 91 92 |
# File 'lib/corindon/dependency_injection/container.rb', line 90 def clear @services = {} end |
#dup ⇒ Container
25 26 27 28 29 30 31 |
# File 'lib/corindon/dependency_injection/container.rb', line 25 def dup Container.new( definitions: definitions.values, parameters: parameters.dup, service_built_listeners: service_built_listeners ) end |
#get(key) ⇒ Object
96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/corindon/dependency_injection/container.rb', line 96 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
85 86 87 |
# File 'lib/corindon/dependency_injection/container.rb', line 85 def has?(key) definitions.key?(to_id(key)) end |
#on_service_built(listener) ⇒ Object
127 128 129 |
# File 'lib/corindon/dependency_injection/container.rb', line 127 def on_service_built(listener) service_built_listeners << listener end |
#parameter(key) ⇒ Object
122 123 124 |
# File 'lib/corindon/dependency_injection/container.rb', line 122 def parameter(key) parameters.fetch(to_id(key)) end |
#parameter?(key) ⇒ Boolean
116 117 118 |
# File 'lib/corindon/dependency_injection/container.rb', line 116 def parameter?(key) parameters.key?(to_id(key)) end |
#set_parameter(name, value) ⇒ Object
110 111 112 |
# File 'lib/corindon/dependency_injection/container.rb', line 110 def set_parameter(name, value) parameters[to_id(name)] = value end |
#tagged(tag) ⇒ Array<String>
74 75 76 77 78 79 80 81 |
# File 'lib/corindon/dependency_injection/container.rb', line 74 def tagged(tag) if .key?(tag) .fetch(tag) else [] end end |