Class::Componentのメモ

C::C::Component::Plaggerizeをつかったアプリで、__PACKAGE__->load_pluginsしたプラグインのinitから$context->confが使えなくてdieしたので、初期化シーケンスを調べてみた。
ほんとはこんなに単純ではないんだけどね。

newが呼ばれると、NEXTでさかのぼって、最初にClass::Component::newを実行される。
  引数で渡したやつとdefaultプラグインのみがロードされる。
  ロードされる中で、プラグインクラスがrequire、newされる。
    newの中で、configをセットした後にプラグインのinitを実行。
  プラグインオブジェクトのregisterを実行。
    アトリビュートクラスのrequireと、アトリビュートクラスのregisterを実行。
      hook、methodの登録などが行われる
C::C::C::Plaggerize::newに戻り、引数のconfigからconfをセットアップ
confを基にプラグインがロードされる。

configで渡したプラグインとデフォルトプラグインでは、初期化されるタイミングが違うんだね。