Ruby on rails Ruby/Rails依赖注入

Ruby on rails Ruby/Rails依赖注入,ruby-on-rails,ruby,dependency-injection,Ruby On Rails,Ruby,Dependency Injection,我试图学习Ruby/Rails中的依赖注入。如何使用依赖项注入删除Builders对Saw的显式引用 class Builder attr_reader :saw def saw @saw ||= Saw.new(4) end def cut_wood Saw.saw end end class Saw attr_reader :blades def initialize(blades) @blades = blades end

我试图学习Ruby/Rails中的依赖注入。如何使用依赖项注入删除
Builder
s对
Saw
的显式引用

class Builder
  attr_reader :saw

  def saw
    @saw ||= Saw.new(4)
  end

  def cut_wood
    Saw.saw
  end
end

class Saw
  attr_reader :blades

  def initialize(blades)
    @blades = blades
  end

  def saw
    # do something
  end
end

Saw
的初始化移动到默认参数

class Builder   
  def saw(saw = Saw.new(4))
    @saw = saw
  end

  def cut_wood
    Saw.saw
  end
end
Builder#saw
现在支持依赖项注入

请记住从代码中删除
attr\u reader:saw
,因为它正被自定义读取器覆盖

class Builder

  def initialize(saw=Saw.new(4))
    @saw = saw
  end

  def cut_wood
    @saw.saw
  end
end

# Use it
b = Builder.new
b.saw

another_saw = AnotherSaw.new
b = Builder.new(another_saw)
b.saw
通过默认saw初始化生成器实例。因此,您可以使用默认设置,也可以使用自己的设置。通过这种方式,您将Saw与构建器解耦

顺便说一下,我不知道锤子是用来做什么的,所以我没有写它。它看起来只不过是代码中的attr读取器


也不需要<代码> TraceRead:SAW 我删除它。

应该在初始化中传递,考虑创建一个BuffDealEngEnter类,你可以使用<代码> AtthyAccess:Bu建器现在S= <代码> SAW。新< /COD> <代码> S.Bu建ds=“ASDASDASD”以及s.builders#对设置结果进行fet,以便为依赖于saw的构建器完成getter和setter更改了构建器#锤对构建器#saw,从而使其更具意义啊。。。。。但是依赖项是通过
attr\u访问器创建的,尽管代码有10行