class Dinja::Container
Dependency injection container
Attributes
Public Class Methods
# File lib/dinja/container.rb, line 8 def initialize @dependencies = {} end
Public Instance Methods
Look up a dependency without resolving it
@param [String] key The unique name under which the dependency was registered
@raise [DependencyNotRegistered] If the dependency was not registered
# File lib/dinja/container.rb, line 40 def lookup(key) raise DependencyNotRegistered, "Dependency not registered: #{key}" unless dependencies.key?(key) dependencies[key] end
Look up a dependency without resolving it
@param [String] key The unique name under which the dependency was registered
# File lib/dinja/container.rb, line 50 def lookup!(key) dependencies[key] end
Register a dependency
@param [String] key The unique key under which the dependency will be registered @param [Proc] &block The proc to be called when resolving the dependency
@raise [DependencyAlreadyRegistered] If the dependency was already registered before
# File lib/dinja/container.rb, line 19 def register(key, &block) raise DependencyAlreadyRegistered, "Dependency already registered: #{key}" if dependencies.key?(key) register!(key, &block) end
Register or overwrite an existing dependency
@param [String] key The unique key under which the dependency will be registered @param [Proc] &block The proc to be called when resolving the dependency
# File lib/dinja/container.rb, line 30 def register!(key, &block) dependencies[key] = block end
Resolve a dependency
@param [String] key The unique key under which the dependency was registered @param [Object] *args The arguments to pass when resolving the dependency @param [Proc] &block The block to pass when resolving the dependency
@raise [DependencyNotRegistered] If the dependency was not registered
# File lib/dinja/container.rb, line 62 def resolve(key, *args, **kwargs, &block) lookup(key).call(*args, **kwargs, &block) end
Resolve a dependency
@param [String] key The unique key under which the dependency was registered @param [Object] *args The arguments to pass when resolving the dependency @param [Proc] &block The block to pass when resolving the dependency
# File lib/dinja/container.rb, line 72 def resolve!(key, *args, **kwargs, &block) lookup!(key)&.call(*args, **kwargs, &block) end