[Seasar-user:15033] Re: 配列のAutoBinding
"TAKEUCHI Shinichi / 竹
"TAKEUCHI Shinichi / 竹
2008年 7月 15日 (火) 14:03:51 JST
お世話になります、竹内です。
定義を増やせば自動的に取り込まれるという柔軟性に寄与している
のは分かりましたが、通常のDIの場合は同種のコンポーネントを定義
すると「TooMany」となって重複が分かりますが、配列の場合はOwnRisk
となるという点が違うと思います。
既存のコンポーネントをIncludeしたら、いつの間にか配列要素が
増えていて動作が???となったのが、今回のそもそもの発端です。
それで、配列としてのDIを明示しようとDiconに以下のように
書いてみたらうまく動作しませんでした。
<component name="hogeArray" class="[La.b.hoge">
new a.b.hoge[]{ new a.b.hoge(), new a.b.hoge() }
</component>
class=部分をなくすと動作はするのですが、Diconには配列のクラスは
登録はできないということですか?
On Sat, 12 Jul 2008 01:00:19 +0900
Koichi Kobayashi <[E-MAIL ADDRESS DELETED]> wrote:
> 小林 (koichik) です.
>
> Date: Fri, 11 Jul 2008 20:26:47 +0900
> From: "TAKEUCHI Shinichi / 竹内 伸一" <[E-MAIL ADDRESS DELETED]>
> To: [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:15006] Re: 配列のAutoBinding
>
> > 配列のDIは注意が必要ですね。コンストラクタで配列の要素に
> > 値を入れておいても、S2コンテナにマッチングする要素があると
> > 自動的にDIされてしまって値が変わってしまいます。
>
> それは配列に限らず DI 全般でそうなります.
>
> > 現在の仕様と以下のような仕様を切り替えられるようにでき
> > ないものでしょうか?
>
> この機能が追加されてから約 2 年経っているので,今から
> 変更することはないと思います.
> その間,この機能があって困ったという声もなかったと
> 思いますし.
>
> ちなみに,アノテーションで対応できないのでしょうか?
> 同じ型のプロパティが多数のクラスにあるなら,大抵は
> 共通のスーパークラスを持っているでしょうから,そこに
> アノテーションを指定すれば終わりですよね?
>
> > 現在の仕様でのありがたみが分からない
> > ので、実はとっても大事な部分で使われているのかもしれません
> > が、、、
>
> <component class="Foo">
> <initMethod name="addBar">
> <var>
> <component class="Bar">
> </component>
> </var>
> </initMethod>
> <initMethod name="addBar">
> <var>
> <component class="Bar">
> </component>
> </var>
> </initMethod>
> <initMethod name="addBar">
> <var>
> <component class="Bar">
> </component>
> </var>
> </initMethod>
> ...
> </component>
>
> と書いていたのが
>
> <component class="Foo">
> </component>
> <component class="Bar">
> </component>
> <component class="Bar">
> </component>
> <component class="Bar">
> </component>
> ...
>
> のように書くことができます.
> 例えば S2Dxo の Jar の中に含まれている
> dxo-builtin-converters.dicon はその例で,
>
> http://svn.seasar.org/browse/trunk/seasar2/s2-extension/src/main/resources/dxo-builtin-converters.dicon?revision=2711&root=s2container&view=markup
>
> ここで列挙されているコンポーネントの配列が dxo.dicon に
> 定義されているコンポーネントのプロパティに DI されます.
>
> AutoRegister と組み合わせても便利でしょう.
>
>
> --
> <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 メーリングリストの案内