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

Hiroki Inoue [E-MAIL ADDRESS DELETED]
2008年 1月 7日 (月) 22:20:34 JST


井上です。お世話になっております。
本年もよろしくお願いいたします。


リクエストのバインディングの件、調査ありがとうございました。
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のどちらでも)


08/01/06 に Kazuya Sugimoto さんは書きました:
> 杉本です。
>
> あけましておめでとうございます。
>
> 井上さん、遅くなり申し訳ありません。
>
> 1点目の自動バインディングの件ですが、リクエストを自動バインディングできない
> のは不具合ですが、当面は、リクエスト等は手動バインディングで利用してください。
> 申し訳ございません。
>
> ドキュメントの方も修正しておきます。
>
> 2点目の方ですが、こちらで同じようなコードを作成して試してみましたが、
> 問題なくWebフォームに自動バインディングされることを確認しました。
>
> 再現するプロジェクトを作成して添付していただければ、そちらで調査してみます。
>
> よろしくお願いします。
>
> --
> Kazuya Sugimoto
> Microsoft MVP Visual Developer - Solutions Architect
> http://d.hatena.ne.jp/sugimotokazuya/
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


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