AOP

重いRealProxy#Invokeを他の良い方法で置き換える

先日のエントリの代替案(というかこちらの方がより良い)について、NyaRuRuさんに非常に詳しく解説頂いた。パフォーマンスのための Delegate, LCG, LINQ, DLR (を後で書く) - NyaRuRuの日記すぐにでも試したくてうずうずしているのだが今日は時間が無い。取り…

INotifyPropertyChangedと大量データの転記

以前に何度か紹介したが、拙作のフレームワークではS2Container.NETと同様のRealProxyを用いたAOP機能により、DTOのプロパティ変更通知を自動化している。カスタム属性を用いたデータバインディングの省力化(INotifyPropertyChanged実装編)この機能のおかげ…

PostSharp

久しぶりにAOPネタ。PostSharp - postsharp.orgakirameiさんの所で紹介されていた、.NETの主に(※)AOPのためのフレームワーク。 はじめてのPostSharp - 匣の向こう側 - あまりに.NETな以前ここでも書いたが、.NETにおけるAOPの実装の方法は .NETプラットホー…

全てのDIxAOP入門者に

発売前から日記で薦めておいて、自分では読んでいなかったのだがようやくちゃんと読めた。 表紙を見ると、いかにもSeasar2を利用した開発のノウ・ハウ本のようなイメージを持つ人がいると思うが、騙されてはいけない。4章まではSeasar2のシの字位しか登場し…

リッチクライアントとロールベースセキュリティ

何度となく書いているが、拙作のフレームワークはWindowsFormsベースのリッチクライアント(スマートクライアント)が主なターゲットである。このフレームワークにセキュリティの機能、具体的には認証の機能を組み込むことを予定しているのだが、不勉強な私は…

型の爆発

.NET の「実行時型情報」は immutable かつ GC 不可能 - NyaRuRuの日記現在のCLR実装で任意の型がメモリ上から簡単にアンロードできないというのは非常に厳しい制約だ。型が属しているAppDomainをアンロードすることで、型情報もアンロードすることは出来る…

AOPの使いどころ

そう言えば先日の MD3 で,萩原さんから「AOP を不具合修正 (パッチあて) に使うのは良くない」というような話があったような.確かに紙一重な部分はあるかもなぁ.〜 AOP とパッチあて - NyaRuRuの日記 これに関して、非常に共感する。AOPに関して、その黎…

MixIn Interfaces Proxy(その3)

コメント欄だと書きにくいので、エントリとして書くことに。 # sugimotokazuya 『1つ問題がありました。Mixinによるプロキシだと実装クラスの型で受け取れない(キャストできない)という制限がありました。』 とのことだが、実装クラスの型でも受け取りたい…

MixIn Interfaces Proxy

Seasar.DynamicProxyで2回インターセプターが実行される Interfaceを実装している場合は、Interface毎にProxyを作成していたのですが、Interface毎のProxyを作るときに既に拡張されたクラスからProxyを作ろうとしていたためです。DynamicAopProxyAspectWeave…

MixIn Interfaces Proxy(その2)

時間が無いので以下のような、簡単なデモを書いて動かしてみた。 namespace DynamicProxy { public class MixedInProxyTest { [STAThread] static void Main(string args) { IMethodInterceptor interceptor = new TraceInterceptor(); IPointcut pointcut =…

DIコンテナにおけるAOP用途プロキシの処理コストと型の違い

5/31のエントリ?に対して、すぎもとさんに言及頂いた。 インスタンスの生成が頻繁に必要で、インスタンス生成時のコストを下げたい場合は、S2Container.NET標準のAopProxyが有利です。逆にインスタンスの生成時のコストがそれほど重要では無い場合は、Aspect…

IL EmitによるAOP (4)

s2dotnetでのAOPを実現する機能の概略に関してもう一度書いてみます。 1.定義されたアスペクト、アドバイスからそれぞれのオブジェクトを生成する 2.アスペクトの適用対象となる型の全てのメッセージをインターセプトする 3.メッセージをインターセプトした…

IL書換えの手段が欲しい

徒労に終わったIL Emitによるs2dotnetのAOP機能ですが、一通り試してみて思ったのは透過Proxyによらないメソッドインターセプションを実現するためには"型の生成"ではなく"型の書換え"が必要だということです。Sesar2ではcglib、最近の版ではjavassistを利用…

IL EmissionによるAOP (1)

以前に日記で言及したことがある.NETにおけるDIコンテナ上のAOPの実現ですが拙作のフレームワークはS2.NETと同様にRealProxyを使用した"Proxy"方式のAOPを実装しています。現在の.NETプラットホームで可能なAOP実装のまとめこの手法はRealProxyの派生型はそ…

IL EmitによるAOP (2)

.NET上でRealProxyを利用する以外に私が考えられるAOPの実現方法はあと二つあります。現在の.NETプラットホームで可能なAOP実装のまとめより Annotation 方式 TypeEmission 方式 よりシンプルに、RealProxy方式に負けず劣らず簡単に使用できることを考えると…

IL EmitによるAOP (3)

ProxyFactoryは元の型を拡張した別な型とその実装を生成すると書きましたが実際にどのような型が生成されているのでしょう。前回書いた方法で動的に生成された型を物理的なアセンブリとして出力できることが解ったので実際に出力されたアセンブリを.NET Refl…