はじめに
先日に引き続き
Policy Injection Application Block (以下 PIAB) の変更点を調べました。
変更点
EntLib4.1 では、メソッドのインターセプトを Unity がやってくれるようになりました。
PIAB は Unity の機能を利用するだけです。
Unity を使ったメソッドのインターセプト方法
Microsoft.Practices.Unity.Interception を参照に追加し、例えば下記のようなコードを書けばOKです。
// DI コンテナを生成する。
IUnityContainer container = new UnityContainer();
// DI コンテナのインスタンス生成パイプラインを拡張する。
// インスタンスをラップしてメソッドをインターセプト可能にする処理が追加される。
container.AddNewExtension<Interception>();
// DI コンテナから取得するインスタンスをインターセプトする方法を指定。
container.Configure<Interception>()
.SetInterceptorFor<IAnimal>(new TransparentProxyInterceptor());
// 型を登録する。
container.RegisterType<IAnimal, Wankuma>("Wankuma");
// コンテナから取得した animal オブジェクトの、
// Cry メソッドはインターセプトされる。
var animal = container.Resolve<IAnimal>("Wankuma");
animal.Cry();
最後に
Unity だけでアスペクト指向プログラミングが可能になっています。
PIAB の存在意義が・・・(;^_^A