class Justdi::Container

Generic container

Attributes

resolver[W]
store[W]
use_resolver[W]
use_store[W]

Public Class Methods

resolver() click to toggle source

Resolver module @return [Module<Justdi::Resolver>]

# File lib/justdi/container.rb, line 15
def resolver
  @resolver ||= Justdi::Resolver
end
store() click to toggle source

Class for generation @return [Class<Justdi::DefinitionStore>]

# File lib/justdi/container.rb, line 21
def store
  @store ||= Justdi::DefinitionStore
end

Public Instance Methods

[](token) click to toggle source

Short getting syntax @param token [String, Symbol, Numeric, Class] @return [*]

# File lib/justdi/container.rb, line 46
def [](token)
  get(token)
end
get(token) click to toggle source

Load and resolve dependency

@param token [String, Symbol, Numeric, Class] @return [*]

# File lib/justdi/container.rb, line 37
def get(token)
  store.get(token)&.resolve do |definition|
    self.class.resolver.call definition, self
  end
end
import_store(def_store, overwrite: true) click to toggle source

Import definition store

@param def_store [Justdi::DefinitionStore] @param overwrite [Boolean]

# File lib/justdi/container.rb, line 69
def import_store(def_store, overwrite: true)
  return store.merge(def_store) if overwrite

  def_store.each do |key, value|
    store.set(key, value) unless store.has?(key)
  end
end
merge(*containers) click to toggle source

Merge containers

@param containers [Array<Justdi::Container>]

# File lib/justdi/container.rb, line 61
def merge(*containers)
  containers.each { |container| store.merge container.store }
end
resolve(klass) click to toggle source

Resolve dependency

@param klass [Class<T>] @return [T]

# File lib/justdi/container.rb, line 54
def resolve(klass)
  self.class.resolver.class_value(klass, self)
end

Protected Instance Methods

store() click to toggle source

Definition store @return [Justdi::DefinitionStore]

# File lib/justdi/container.rb, line 81
def store
  @store ||= self.class.store.new
end