[Seasar-s2dotnet 66] Re: s2.NETのAOPの実装について

Kazunori Satoh kazz2
2005年 8月 19日 (金) 18:14:18 JST


 佐藤と申します。

 私はコミッタではありませんが.NETのAOPに関しては非常に興味があります。

> これは、thisポインタがHogeImplのインスタンスに対する実参照を返すためで、
> これによってAopProxyのコードがバイパスされてしまいます。ターゲットのク
> ラスをContextBoundObjectから直接または間接に派生すれば、thisポインタも
> TranspaerntProxyポインタとして返すようになりますが、現在のS2.NETの実装
> では(ContextAttribute内で作成されるなどの)ContextPropertyによって
> IMessageSinkを透過的に挿入しているわけではないので、例えターゲットクラ
> スをContextBoundObjectから派生させたとしても自前のRealProxy(AopProxy)
> のInvokeが呼び出されるわけではなく、規定のRealProxyが呼び出されるだけ
> で、結果は同じです。

  AopProxyが単なるRealProxyからの派生クラスであることを考えると現在の
  振る舞いはご指摘の通りだと思います。

> spring.NETのようにSystem.Reflection.Emit(またはCodeDOM)を使った動的
> コード生成の手法への変更も視野に入れても良いのではと私は思いますが、み
> なさんはどうでしょうか?

  同感です。パフォーマンスに問題が出そうなContextBoundsObjectを
  使うよりもILのEmitやCodeDomでの実装を使いたい所ですね。
  なにより、まずは透過プロキシを使うことによる制限を無くしたいと思います。

  私の日記(http://d.hatena.ne.jp/Kazzz/)の方で.NETのDIコンテナにおける
  AOPの実装に関して実際にILのEmitを使用した実装について試している最中
  です。

  AOP機能を動かすことまではできたのですが別な型を生成するためにDI
  コンテナによるプロパティ等の注入が上手くいっていない状況です。
  何か良いアィディアが無いかなと仕事の合間に考えている最中です。

************************************************************************
* Kazunori Satoh <kazz2 @ joy.hi-ho.ne.jp_NOSPAM>
* http://d.hatena.ne.jp/Kazzz/
*
**




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