2.6. Dependency Injection

プロパティ・インジェクションにより、DIを実施します。インスタンス変数とアクセッサメソッドがプロパティとして扱われます。 インスタンス変数プロパティの場合は、デフォルト値でインジェクションを行うコンポーネントを指定します。 プロパティ値がnilの場合、プロパティ名(Symbol)がコンポーネント名として使用されます。 プロパティ値が配列で、1番目の値が「di」の場合、2番目の値がコンポーネント名となります。 アクセッサメソッドのプロパティの場合は、attr_accessorで指定するプロパティ名がDIされるコンポーネント名となります。

require 's2container'

class Action
  s2comp
  def initialize
    @a = nil              # コンポーネント名は :a
    @b = :di, ServiceB    # Arrayで指定
  end
  attr_reader :a, :b
  attr_accessor :c
end

class ServiceA
  s2comp :name => :a
end

class ServiceB
  s2comp :instance => :prototype
end

class ServiceC
  s2comp :name => :c
end

p s2app[Action].a
p s2app[Action].b
p s2app[Action].c
[注意]NOTE

この例は example/quickstart/quickstart6 にあります。



© Copyright The Seasar Foundation and the others 2008-2009, all rights reserved.