首页 > 其他 > 详细

C# AOP实现

时间:2014-03-11 22:02:15      阅读:581      评论:0      收藏:0      [点我收藏+]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Remoting.Proxies;
 
namespace Aop
{
    public class AopAttribute : ProxyAttribute
    {
        public override MarshalByRefObject CreateInstance(Type serverType)
        {
            AopProxy realProxy = new AopProxy(serverType);
            return realProxy.GetTransparentProxy() as MarshalByRefObject;
        }      
 
 
    }
}

 AopProxy.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Reflection.Emit; 
using System.Runtime.Remoting.Proxies; 
using System.Runtime.Remoting.Messaging; 
using System.Runtime.Remoting.Activation; 
using System.Windows.Forms; 
   
namespace Aop 
    public class AopProxy : RealProxy 
    
        public AopProxy(Type serverType) 
            : base(serverType) { } 
   
        public override IMessage Invoke(IMessage msg) 
        
            if (msg is IConstructionCallMessage) 
            
                IConstructionCallMessage constructCallMsg = msg as IConstructionCallMessage; 
                IConstructionReturnMessage constructionReturnMessage = this.InitializeServerObject((IConstructionCallMessage)msg); 
                RealProxy.SetStubData(this, constructionReturnMessage.ReturnValue); 
                Console.WriteLine("Call constructor");
                return constructionReturnMessage; 
            
            else 
            
                IMethodCallMessage callMsg = msg as IMethodCallMessage; 
                IMessage message; 
                try 
                
                    object[] args = callMsg.Args; 
                    object o = callMsg.MethodBase.Invoke(GetUnwrappedServer(), args); 
                    message = new ReturnMessage(o, args, args.Length, callMsg.LogicalCallContext, callMsg); 
                
                catch (Exception e) 
                
                    message = new ReturnMessage(e, callMsg); 
                
                Console.WriteLine(message.Properties["__Return"].ToString());
                return message; 
            
        
    

 AopAttribute.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System; 
using System.Collections.Generic; 
using System.Text; 
   
namespace Aop 
    [AopAttribute] 
    public class AopClass : ContextBoundObject 
    
        public string Hello() 
        
            return "welcome"
        
   
    

 AopClass.cs

C# AOP实现,布布扣,bubuko.com

C# AOP实现

原文:http://www.cnblogs.com/Byrd/p/3593330.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!