AOPの理解と実現

7758 ワード

AOP:カットオフプログラミング向けで,既存のコードを破壊することなく,新しい機能を提供する.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                 });