[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 メーリングリストの案内