Sha256: e03575ceec03dbe193c9d1002aada64a91f353262609cbf70dbe83ee697809c2

Contents?: true

Size: 1.06 KB

Versions: 9

Compression:

Stored size: 1.06 KB

Contents

require 'dependency_injection/container'

c = DependencyInjection::Container.new

# 1 - constructor specific class initialization
class NewsletterManager
  def initialize(mailer)
    @mailer = mailer
  end

  def send_mail(message)
    @mailer.send_mail(message)
  end
end

class Mailer
  def send_mail(message)
    puts "mail sent: #{message}"
  end
end

c.register('my.mailer', 'Mailer')
c.register('newsletter', 'NewsletterManager').add_argument('@my.mailer')

c.get('newsletter').send_mail('Hello World')
# => mail sent: Hello World

Object.instance_eval { remove_const(:NewsletterManager) }

# 2 - method specific class initialization
class NewsletterManager
  attr_accessor :mailer, :from

  def send_mail(message)
    puts "mail sent by #{@from}"
    @mailer.send_mail(message)
  end
end

c.register('my.mailer', 'Mailer')
c.register('newsletter', 'NewsletterManager')
  .add_method_call('mailer=', '@my.mailer')
  .add_method_call('from=', 'john@doe.com')

c.get('newsletter').send_mail('Hello World')
# => mail sent: Hello World

Object.instance_eval { remove_const(:Mailer) }

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
dependency_injection-0.4.3 examples/inject_a_reference_to_another_dependency.rb
dependency_injection-0.4.2 examples/inject_a_reference_to_another_dependency.rb
dependency_injection-0.4.1 examples/inject_a_reference_to_another_dependency.rb
dependency_injection-0.4.0 examples/inject_a_reference_to_another_dependency.rb
dependency_injection-0.3.1 examples/inject_a_reference_to_another_dependency.rb
dependency_injection-0.3.0 examples/inject_a_reference_to_another_dependency.rb
dependency_injection-0.2.0 examples/inject_a_reference_to_another_dependency.rb
dependency_injection-0.1.1 examples/inject_a_reference_to_another_dependency.rb
dependency_injection-0.1.0 examples/inject_a_reference_to_another_dependency.rb