[seasar-dotnet:177] Re: ASP.NET でaspectが機能しない

T_Osugi t_osugi @ mit.to
2006年 4月 10日 (月) 17:25:23 JST


お世話になっております。大杉です。

> 現状では、自動バインディングされたコンポーネントで無い場合は、
> (大杉さんのようにpropertyタグもしくはargタグで手動でDIしている場合)
> MarshalByRefObjectを継承していないとAspectできません。
>
> AOPドキュメントの注意点の2つ目の制限がかかっているようです。
> 手動でDIした場合、内部的に受け側がInterfaceかどうか確認できて
> ないからですね。この制限についてはもう少し調査してみますので、
> お時間ください。
確かに、すべてのDIの設定を自動バインディングにしてみると
ログが出力されて来ましたので、杉本さんの指摘通りではないかと思われます。
自動バインディングで回避できるのであれば、できればそうしたいのですが、
自動バインディングを行おうとするとWebフォームのみうまく動作しません。
Webフォームでの自動バインディングは普通のクラスとは設定方法が異なるのでしょうか?

ServiceディレクトリにILogonServiceインターフェイス
Service\ImplにLogonServiceImpl実装クラス
を配置しており、

Webフォームのプロパティは下記のように設定しています。
private ILogonService _logonService = null;
  public ILogonService LogonService
  {
   set
   {
     _logonService = value;
   }
  }

また、プレゼンテーション層のdiconファイルは下記のように設定しています。
(プロパティ部分はコメント化して自動バインディングにしています。)
<component name="/WebAP/HelloWorld.aspx" instance="outer">
     <!-- プロパティインジェクション -->
     <property name="Message">"プロパティインジェクションテスト成功"</property>
     <!-- <property name="LogonService">Service.LogonService</property> -->
 </component>




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