[seasar-dotnet:727] Re: S2ContainerのASP.NETでの利用について

Kazuya Sugimoto [E-MAIL ADDRESS DELETED]
2008年 1月 8日 (火) 09:25:07 JST


杉本です。

> DIは無事行えましたが、ロジックのコンポーネントとは別に「aspx」だけを
> まとめて1つのdiconファイルに書きたいと思ったのですが、一般的にASP.NETで
> S2Containerを使う場合のdiconファイルの構成(置き場所も含め)はどのように
> するのでしょうか?

Diconをincludeする場合ですが、親から子へは参照できますが、子から親と
兄弟どおしは参照できません。

なのでPage.diconの中でLogic.diconをincludeすると良いと思います。
LogicからPageを参照することはないと思いますので。

> このような書き方で問題ないでしょうか。アセンブリ名を省略することで余計なところ
> まで探しにいって(?)パフォーマンスが落ちる、ということはないでしょうか?

どの程度パフォーマンスが落ちるかは実際の環境で計測してみないと
分かりませんが、多少は落ちると思います。

AutoRegisterで登録するようなロジッククラスは、Webフォームとはプロジェクトを
分けて別のDLLを作るようにすると良いです。

> # もしS2Container.NETを使ったASP.NETのサンプルプログラムで、よいものがありましたら
> # 教えてください。(C#、VB.NETのどちらでも)

すいません。現状はないです。
ASP.NETのサンプルを用意したいのですが、実現できていません。


08/01/07 に Hiroki Inoue さんは書きました:
> 井上です。お世話になっております。
> 本年もよろしくお願いいたします。
>
>
> リクエストのバインディングの件、調査ありがとうございました。
> DIコンテナの勉強中に気になったので質問させていただきましたが、
> どうしても必要、というわけではないので大丈夫です。
>
> Webフォームに対してのDIについてですが、もう一度ソースを見直して
> 間違いに気づきました…。お騒がせして申し訳ありません。
>
> 原因はdiconファイルの書き方でした。以前はこのように書いていました。
>
> App.dicon
> -----
> <components>
>  <include path="App_Data/Dicon/Logic.dicon" />
>  <include path="App_Data/Dicon/Page.dicon" />
> </components>
> -----
>
> Logic.dicon
> -----
> <components namespace="Logic">
>  <component name="CalcLogic" class="Sample.Web.Logic.Impl.CalcLogic"
> instance="request" />
>  <component name="Class1" class="Sample.Foo.Bar.Class1" instance="outer" />
> </components>
> -----
>
> Page.dicon
> -----
> <components namespace="Page">
>  <component name="/Default.aspx" instance="outer" />
>  <component name="/child/Sample.aspx" instance="outer" />
> </components>
> -----
>
> 「aspx」ファイルは別diconファイルに分けたほうがよいだろうと考え、
> 何気なく分けてしまったのですが、名前空間の分け方が「Logic」「Page」と
> まったく異なっているので、これが原因だったのではないかと思います。
> 「Page.dicon」をなくして「Logic.dicon」の「Logic」名前空間にまとめたら
> DIされました。また、「App.dicon」の名前空間なしにまとめてもDIされました。
>
> DIは無事行えましたが、ロジックのコンポーネントとは別に「aspx」だけを
> まとめて1つのdiconファイルに書きたいと思ったのですが、一般的にASP.NETで
> S2Containerを使う場合のdiconファイルの構成(置き場所も含め)はどのように
> するのでしょうか?
>
> 別ファイルに分けても名前空間をそろえれば(たとえば「Page.dicon」を残して
> 「namespace」要素を削除するか、「Logic.dicon」の「Logic」にあわせるか)
> 動くと思ったのですが、それでは動きませんでした。ロジックとASP.NETページの
> コンポーネント定義は同じファイル内で行うべきでしょうか?
>
>
> ついでになってしまいますが、diconに関連してもう1件お伺いしたいことがあります。
> ASP.NETでは「Bin」ディレクトリに置いたクラスが自動的にコンパイルされ、.NET
> フレームワークのテンポラリにDLLのアセンブリが作られるのでアセンブリ名はわから
> ないと思います。「AssemblyComponentAutoRegister」を使う際、一般的にはアセン
> ブリ名を指定するようですが、先の理由によりアセンブリ名が明確でないので、現状は
> 次のように省略してしまっています。
> -----
>  <component class="Seasar.Framework.Container.AutoRegister.AssemblyComponentAutoRegister">
>    <property name="InstanceMode">"request"</property>
>    <property name="AutoBindingMode">"auto"</property>
>    <initMethod name="AddClassPattern">
>      <arg>"Sample.Web.Logic.Impl"</arg>
>      <arg>".*Logic"</arg>
>    </initMethod>
>    <initMethod name="RegisterAll" />
>  </component>
> -----
> このような書き方で問題ないでしょうか。アセンブリ名を省略することで余計なところ
> まで探しにいって(?)パフォーマンスが落ちる、ということはないでしょうか?
>
>
> 以上、よろしくお願いいたします。
>
> # もしS2Container.NETを使ったASP.NETのサンプルプログラムで、よいものがありましたら
> # 教えてください。(C#、VB.NETのどちらでも)


-- 
Kazuya Sugimoto
Microsoft MVP Visual Developer - Solutions Architect
http://d.hatena.ne.jp/sugimotokazuya/


seasar-dotnet メーリングリストの案内