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