-Inject Dependency機能(2)

上記を最初(ページを作成した直後)にやる感じです。property,initMethodタグだけをPageに適用するつもりでいます。一度、injectDependencyしたら後は、コンテナの手を離れて、Tapestryにまかせると。ページをプーリングするかどうかもTapestryまかせ。

from ひがやすおの日記2004/03/22
了解です。Type2+Type4なやり方をTapestryのカスタムコード側でなく、S2Containerのユーティリティ的機能で用意するわけですね。あとはTapestry3.1のほうでHiveMind入れるときにこういうやり方でやってくれればOK。私のほうで未完成の(なんでかバグってた)エンジンのようにTapestry部品をカスタマイズする方法なら現行の3.0でもできます。
さっき出てきてたのに触れられなかったメソッド、

injectDependency(Object component, Class componentClass)
injectDependency(Object component, String componentName)

これらはプロパティセットとinitMethodのための設定を引くために、第二引数あるわけですか。

<component name="home" instance="injection">
  <property name="prop">'val'</property>
  <initMethod name="addItem">
    <arg>item</arg>
  </initMethod>
</component>

というXML設定あって、

IComponentContainer container_;
container_ = componentContainerHolder.getComponentContainer(); 

//とりあえずPageSource#getPage(
//          IRequestCycle,String,IMonitor)が候補
public IPage getPage(
         IRequestCycle cycle, String pageName, IMonitor monitor) {
  IPage page = super.getPage(cycle, pageName, monitor);
  pageInjectBegin(monitor, pageName);
  try {
    container_.injectDependency(page, pageName);
  } catch(ComponentNotFoundRuntimeException e) {
    pageInjectException(monitor, pageName, e);
  }
  pageInjectEnd(monitor, pageName);
  return page;
}
//あと、JWCコンポーネントの場合も考えねば

Tapestry(改)がすれば、この"page"オブジェクトはS2の設定で"prop"プロパティに"val"をセットし、"addItem(item)"を実行すると。
コメントが付いた時点から後に例示をいろいろいじってしましました。ごめん>ひがさん
JWCコンポーネントの場合は難しいです。privateばっかでタイミングとれない。。。