[Seasar-user:15006] Re: 配列のAutoBinding
"TAKEUCHI Shinichi / 竹
"TAKEUCHI Shinichi / 竹
2008年 7月 11日 (金) 20:26:47 JST
お世話になります、竹内です。
回答ありがとうございます。後で試して見ます。
配列のDIは注意が必要ですね。コンストラクタで配列の要素に
値を入れておいても、S2コンテナにマッチングする要素があると
自動的にDIされてしまって値が変わってしまいます。
ただし、名称一致でDIされるように配列のコンポーネントをDicon
に定義してあると、そちらが優先されます。
現在の仕様と以下のような仕様を切り替えられるようにでき
ないものでしょうか?現在の仕様でのありがたみが分からない
ので、実はとっても大事な部分で使われているのかもしれません
が、、、
配列のDI仕様の案
1)AutoBindingのデフォルト動作
S2コンテナに配列として登録されているもののみを対象とする
(ただし、dicon の component 定義では、配列のクラスを
class="[Lxx.yy.Hoge" とはできないような、、、)
2)Annotationの追加:旧仕様を使いたい場合への対処
配列のクラス型で探して見つかったすべてのコンポーネントを
DIするための指定(例:bindingPolicy="exact|find")
On Fri, 11 Jul 2008 17:00:26 +0900
Koichi Kobayashi <[E-MAIL ADDRESS DELETED]> wrote:
> 小林 (koichik) です.
>
> Date: Fri, 11 Jul 2008 16:45:29 +0900
> From: "TAKEUCHI Shinichi / 竹内 伸一" <[E-MAIL ADDRESS DELETED]>
> To: [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:15003] 配列のAutoBinding
>
> > 1)このAutoBindingを制限することはできますか?
> > 仕様ではAnnotationで個別に制限できますが、たとえば
> > *パッケージを指定しての制限(全DIでなく、配列のみDIを制限)
> >
> > 2)DIされる配列を制限することはできますか
> > たとえば、当該クラスのサブクラスは含めないとか、
> > 逆にサブクラスの内で特定のパッケージに属するものだけにするとか
>
> 標準ではいずれも出来ません.
>
> BindingTypeShouldDef 等のサブクラスを作成して,
> bindAuto() メソッドをオーバーライドして配列の
> バインディングを抑止したものを s2container.dicon に
>
> <component class="...">
> <initMethod>
> @[E-MAIL ADDRESS DELETED](#self)
> </initMethod>
> </component>
>
> のようにすれば何とか出来るんじゃないかと.
>
>
> --
> <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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
--
TAKEUCHI Shinichi / 竹内 伸一 <[E-MAIL ADDRESS DELETED]>
Seasar-user メーリングリストの案内