いいまとめはこちら
http://d.hatena.ne.jp/hiratara/20090417/1239946298

DIがよくわからなかったなぁ
Bread::Boardの感じだと結局コンストラクタに引数与えるのを書き方かえるだけに見えるけど

外部のxmlファイルに記述したくない、って牧さんは言ってたけど、
フォーマットがxmlかどうかは別として、javaをちょいちょい使ってる時の認識では、
別ファイルであることがDIの本質なんじゃないのかなぁと思っていた。

javaはコンパイルの必要な言語で、
xmlを変えてもリコンパイルが必要無い、
ってメリットがjavaではある

使うときにオブジェクトを渡して、使う側ではインターフェースしか使ってない、
こういうのもDIっていうかな
これをいい感じに書けるのがBread::Boardなのかな

package A;
use Moose;

has cache => ( isa => 'Cache::Cache', is => 'rw', required => 1, default => sub { new Cache::FileCache } );

sub fetch_something {
    my ($self, $key) = @_;
    my $ret = $self->cache->get($key);
    if ( ! defined($ret) ) {
        $ret = fetch($key);
        $self->cache->set( $key, $ret );
    }
    $ret;
}
1;

飲み会行かれなくて残念