AOPの理解と実現
7758 ワード
AOP:カットオフプログラミング向けで,既存のコードを破壊することなく,新しい機能を提供する.AOPを使用して、トランザクション、ログ、パーミッション、例外、キャッシュなどの汎用機能を追加できます.
よくあるAOP:MVCのフィルター、HttpModule...
AOPの実現方法:
1、装飾モード、装飾モードはオブジェクトのために新しい機能を動的に拡張し、元のクラスを修正しないので、AOPとなり、汎用性が悪く、特殊なシーン使用(静態)
2、動的エージェントを使用して、動的にオブジェクトを作成します.(ダイナミック)
3、DIフレームワークでは、オブジェクトがコンテナによって作成されているため、AOPが容易に実現でき、その後ケースが更新される
ケース1、動的エージェント実現AOP:
よくあるAOP:MVCのフィルター、HttpModule...
AOPの実現方法:
1、装飾モード、装飾モードはオブジェクトのために新しい機能を動的に拡張し、元のクラスを修正しないので、AOPとなり、汎用性が悪く、特殊なシーン使用(静態)
2、動的エージェントを使用して、動的にオブジェクトを作成します.(ダイナミック)
3、DIフレームワークでは、オブジェクトがコンテナによって作成されているため、AOPが容易に実現でき、その後ケースが更新される
ケース1、動的エージェント実現AOP:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 using Castle.DynamicProxy;//Castle.Core 8 9 namespace MyAOP 10 {// 11 public interface IUserProcessor 12 { 13 void RegUser(User user); 14 } 15 // 16 public class UserProcessor : IUserProcessor 17 { 18 ///
19 /// virtual 20 /// 21 /// 22 public virtual void RegUser(User user) 23 { 24 Console.WriteLine($" 。Name:{user.Name},PassWord:{user.Password}"); 25 } 26 } 27 //AOP 28 public class MyInterceptor : IInterceptor 29 { 30 public void Intercept(IInvocation invocation) 31 { 32 PreProceed(invocation); 33 invocation.Proceed(); 34 PostProceed(invocation); 35 } 36 public void PreProceed(IInvocation invocation) 37 { 38 Console.WriteLine(" "); 39 } 40 41 public void PostProceed(IInvocation invocation) 42 { 43 Console.WriteLine(" "); 44 } 45 } 46 }
1 var interceptor = new MyInterceptor();
2 UserProcessor userprocessor = new ProxyGenerator().CreateClassProxy(interceptor);
3 userprocessor.RegUser(new User
4 {
5 Name = "aaa",
6 Password = "123456"
7 });