module Dry

Public Class Methods

AutoInject(container, options = {}) click to toggle source

Configure an auto-injection module

@example

module MyApp
  # set up your container
  container = Dry::Container.new

  container.register(:data_store, -> { DataStore.new })
  container.register(:user_repository, -> { container[:data_store][:users] })
  container.register(:persist_user, -> { PersistUser.new })

  # set up your auto-injection function
  AutoInject = Dry::AutoInject(container)

  # define your injection function
  def self.Inject(*keys)
    AutoInject[*keys]
  end
end

# then simply include it in your class providing which dependencies should be
# injected automatically from the configured container
class PersistUser
  include MyApp::Inject(:user_repository)

  def call(user)
    user_repository << user
  end
end

persist_user = container[:persist_user]

persist_user.call(name: 'Jane')

@return [Proc] calling the returned proc builds an auto-injection module

@api public

# File lib/dry/auto_inject.rb, line 43
def self.AutoInject(container, options = {})
  AutoInject::Builder.new(container, options)
end