はじめに
先日に引き続き 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