Module: SenroUsecaser::DependsOn::InstanceMethods

Defined in:
lib/senro_usecaser/depends_on.rb

Overview

Instance methods for dependency resolution

These methods are automatically included when DependsOn is extended. They require @_container and @_dependencies instance variables to be set.

Instance Method Summary collapse

Instance Method Details

#initialize(container: nil) ⇒ Object

Default initialize for classes using DependsOn

This provides a default initialize that sets up dependency injection. Classes can override this and call super to extend the behavior.

: (?container: Container?) -> void

Examples:

Default usage (no arguments needed)

class MyService
  extend SenroUsecaser::DependsOn
  depends_on :logger
end
service = MyService.new  # Uses SenroUsecaser.container

With explicit container

service = MyService.new(container: custom_container)

Custom initialize with super

class MyService
  extend SenroUsecaser::DependsOn
  depends_on :logger
  attr_reader :extra

  def initialize(extra:, container: nil)
    super(container: container)
    @extra = extra
  end
end

Parameters:

  • container (Container, nil) (defaults to: nil) —

    The DI container to resolve dependencies from. If nil, uses SenroUsecaser.container.



184
185
186
187
188
# File 'lib/senro_usecaser/depends_on.rb', line 184

def initialize(container: nil)
  @_container = container || SenroUsecaser.container
  @_dependencies = {} #: Hash[Symbol, untyped]
  resolve_dependencies
end

#resolve_dependencies ⇒ Object

Resolves all declared dependencies from the container

Call this in your initialize method after setting @_container and @_dependencies.

: () -> void

Examples:

def initialize(container:)
  @_container = container
  @_dependencies = {}
  resolve_dependencies
end


202
203
204
205
206
# File 'lib/senro_usecaser/depends_on.rb', line 202

def resolve_dependencies
  self.class.dependencies.each do |name| # steep:ignore NoMethod
    @_dependencies[name] = resolve_from_container(name)
  end
end