読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

RubyのDIコンテナ「Needle」を使ってみる。

Ruby Needle

Needle」はRubyで使えるDIコンテナです。

  • インスタンスのライフサイクル管理や、インジェクションなどのDIコンテナの基本的な機能をサポート。
  • 設定ファイルを利用せず、プログラム上でサービスを登録する方式が採用されています。Guiceライク。
  • AOP機能も提供されているようです。

インストール

gem経由で。

$ gem install needle

簡単なレジストリのサンプル

サービスを登録して取得するところまでの簡単なレジストリのサンプルです。

require 'rubygems'
require 'needle'

# レジストリに登録するサービスクラス
class Kitten
  def initialize(name)
    @name = name
  end
  def meow( count )
    @out.puts "#{@name} : #{'meow!' * count}"
  end
  attr :out, true
end

# レジストリを作成
registry = Needle::Registry.define {|builder|
  
  # 「b.<サービスID>」でサービスを登録
  # ブロックの結果がサービスIDに対応するサービスとして登録される。
  builder.out { STDOUT }
  builder.mii    { 
    k = Kitten.new("mii")
    
    # レジストリに登録されている「out」をインジェクト 
    k.out = builder.out 
    k
  }
}

# サービスを取得して使ってみる。
mii = registry[:mii]
mii.meow(3)

# ちなみにデフォルトはシングルトン
# 同じオブジェクトが返される。
puts registry[:mii].object_id
puts registry[:mii].object_id

実行結果です。

mii : meow!meow!meow!
1073187910
1073187910

なかなかよさそう。設定ファイルなしにさくっと使えるのがいいなー。インジェクションが手動なのがやや面倒だけど、コンポーネントの自動インジェクション機能とかあるのかな?要調査。