您的位置:首页 > 运维架构

.Net AOP(二)远程代理Remoting/RealProxy

2016-07-26 09:09 253 查看
远程代理 

1、使用.Net Remoting/RealProxy

采用TransparentProxy和RealProxy实现对象的代理,实现思路如下:Client -TransparentProxy - RealProxy - Target Object

下面实现自定义的TransparentProxy和RealProxy

[csharp] view
plain copy

 





using System.Runtime.Remoting.Proxies;  

using System.Runtime.Remoting.Messaging;  

    //RealProxy  

    public class MyRealProxy<T>:RealProxy  

    {  

        private T _target;  

        public MyRealProxy(T target) : base(typeof(T))  

        {  

            this._target = target;  

        }  

       public override IMessage Invoke(IMessage msg)  

       {  

            PreProceede(msg);  

            IMethodCallMessage callMessage = (IMethodCallMessage)msg;  

            object returnValue = callMessage.MethodBase.Invoke(this._target, callMessage.Args);  

            PostProceede(msg);  

            return new ReturnMessage(returnValue, new object[0], 0, null, callMessage);  

        }  

       public void PreProceede(IMessage msg)  

       {  

           Console.WriteLine("方法执行前");  

       }  

       public void PostProceede(IMessage msg)  

       {  

           Console.WriteLine("方法执行后");  

       }  

    }  

   //TransparentProxy  

   public static class TransparentProxy  

   {  

        public static T Create<T>()  

        {  

           T instance = Activator.CreateInstance<T>();  

           MyRealProxy<T> realProxy = new MyRealProxy<T>(instance);  

           T transparentProxy = (T)realProxy.GetTransparentProxy();  

           return transparentProxy;  

        }  

   }  

用户注册接口和实现

[csharp] view
plain copy

 





public interface IUserProcessor  

    {  

        void RegUser(User user);  

    }  

  

    public class UserProcessor : MarshalByRefObject, IUserProcessor  

    {  

        public void RegUser(User user)  

        {  

            Console.WriteLine("用户已注册。");  

        }  

    }  

客户端调用

[html] view
plain copy

 





public class Client  

    {  

        public static void Run()  

        {  

            try  

            {  

                User user = new User() { Name = "lee", PassWord = "123123123123" };  

                UserProcessor userprocessor = TransparentProxy.Create<UserProcessor>();  

                userprocessor.RegUser(user);  

            }  

            catch (Exception ex)  

            {  

                throw ex;  

            }  

        }  

    }  

优点:简单实现

缺点:性能差
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: