Sha256: d67c1e5f25a833877865518fe7d939da3f1fa20dc77b458ace04f2fe5d90b58a
Contents?: true
Size: 1.72 KB
Versions: 2
Compression:
Stored size: 1.72 KB
Contents
require "dry-auto_inject" module Dry module System # Injection mixin builder # # Injector objects are created by containers and can be used to automatically # define object constructors where depedencies will be injected in. # # Main purpose of this object is to provide injection along with lazy-loading # of components on demand. This gives us a way to load components in # isolation from the rest of the system. # # @see [Container.injector] # # @api public class Injector < BasicObject # @api private attr_reader :container # @api private attr_reader :options # @api private attr_reader :injector # @api private def initialize(container, options: {}, strategy: :default) @container = container @options = options @injector = ::Dry::AutoInject(container, options).__send__(strategy) end # Create injection mixin for specified dependencies # # @example # require 'system/import' # # class UserRepo # include Import['persistence.db'] # end # # @param [Array<String>] *deps Keys under which dependencies are registered # # @return [Dry::AutoInject::Injector] # # @api public def [](*deps) load_components(*deps) injector[*deps] end private # @api private def method_missing(name, *args, &block) ::Dry::System::Injector.new(container, options: options, strategy: name) end # @api private def load_components(*keys, **aliases) (keys + aliases.values).each do |key| container.load_component(key) end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
dry-system-0.5.1 | lib/dry/system/injector.rb |
dry-system-0.5.0 | lib/dry/system/injector.rb |