[Seasar-user:16310] Re: [s2-container] あるテストのときだけMockInterceptorを使ったMockに置き換えたいとき

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2008年 11月 17日 (月) 15:30:07 JST


小林 (koichik) です.

Date:    Mon, 17 Nov 2008 13:19:18 +0900
From:    "Mitsutaka Sato" <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:16308] Re: [s2-container] あるテストのときだけMockInterceptorを使ったMockに置き換えたいとき

> mock.diconのほうにname属性をつけてやってみたのですが、
> logic.diconに用意したほうがセットされてしまいました。
> 
> 下記の例でいう、HogeServiceとHogeLogicは両方とも logic.dicon に
> 登録されている形です。

それでは app.dicon で mock.dicon をインクルード
していても,logic.dicon からは mock.dicon が
見えないのでモックは DI されません.
[Seasar-user:16297] で書いた

> > app.dicon
> >   foo.dicon
> >     baz.dicon
> >   bar.dicon
> > 
> > app.dicon に定義されているコンポーネントからは,
> > 上記の順番で優先的に見えます.

の「app.dicon に定義されているコンポーネントから」が
ポイントです.
コンポーネントは,それが定義されている dicon
およびその dicon がインクルードしている dicon に
定義されているコンポーネントだけが見えます (DI の
対象になります).
親の dicon に定義されたコンポーネントは
見えません (DI の対象になりません).

上記例で foo.dicon に定義されているコンポーネント
からは foo.dicon および baz.dicon に定義されている
コンポーネントが見えますが,app.dicon および
bar.dicon に定義されているコンポーネントは
見えません.

[Seasar-user:16297] でも書いた以下の図が
分かりやすいと思うので参照してください.

http://s2container.seasar.org/2.4/s2-framework/ja/apidocs/org/seasar/framework/container/S2Container.html

Logic を切り替えたいのであれば,HogeService は
app.dicon あるいは service.dicon に定義し,
そこで mock.dicon および logic.dicon を
インクルードしてください.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



Seasar-user メーリングリストの案内