[seasar-dotnet:547] Re: WEB サービスにおけるDIの利用について

Kazuya Sugimoto [E-MAIL ADDRESS DELETED]
2007年 7月 24日 (火) 01:18:06 JST


杉本です。

川谷さん、こんばんは。

ASP.NETの開発はしたことが無かったりするので、ASP.NETの開発を経験している
コミッタの方が良い情報を持ってそうですが、とりあえず仕組みを確認してみました。

結果から言いますと、S2HttpModuleではWebサービスで使用するサービスクラス?
に対してDIすることはできません。

S2HttpModuleはHttpContextからIHttpHandlerの実装クラスを取得して、
その実装クラスに対してDIを行おうとしています。

.aspxの場合は、IHttpHandlerの実装クラスはPageクラスを継承したクラスとなり、
DIを行うことができます。

しかし.asmxの場合は、このIHttpHandlerの実装クラスはWebサービスの
サービスクラスではなく、なにか別な物が使われます。(なんだろ・・?)

そしてasmxファイルからWebサービスのサービスクラスを決定して呼び出して
いるようです。

S2HttpModuleはこの何か別な物にDIしようとしているため、asmxに対しては
うまく動きません。


System.Web.Services.Protocols.WebServiceHandlerFactoryクラスが
おそらくIHttpHandlerの実装クラスをインスタンス化しているようなので、
このあたりを調べたらサービスクラスに自動的にDIすることが可能になるかも
しれません。


だれかこのあたり教えてください・・m(_ _)m


07/07/23 に 川谷さんは書きました:
> 初めまして、川谷と申します。この度WEBサービスを使用したアプリケーションを
> 構築することになったのですが、そのアプリケーションにDIが活用出来ないかと
> S2Container.NET 1.2.9 を検証させて頂いております。
>
> WindowsアプリケーションからのDIやAOPに関しては一通り動作させることが
> 出来たのですが、Webサービスで利用する際にサービスの実装クラスに対して
> Dependency Injection を行うことは可能でしょうか?
> (VS2005でWEBサービスプロジェクトを作成すると自動生成されるService.csに該
> 当)
>
>  http://s2container.net.seasar.org/ja/asp.html を参考に、ASP.NETと同様の
> 設定で色々試してみましたが、Global.asaxの初期化は実行されるものの
> WebMethodが呼び出される際に、Dependency Injectionが行われた状態で
> インスタンスが呼び出せませんでした。diconファイルのcomponent タグにURLや
> クラス名を記述してみましたが、この辺が怪しいかもしれません。
>
> WebMethod内でS2SingletonContainerFactory.Containerを明示的に取得し
> コンポーネントを取り出せば正しく動作する事は確認出来たのですが
> 自動的にInjectionするのは無理でしょうか?
>
> よろしくお願いします。
>
>
>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


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


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