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

来源:互联网 发布:淘宝评论怎么没有了 编辑:程序博客网 时间:2024/05/21 19:26

远程代理

1、使用.Net Remoting/RealProxy

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

下面实现自定义的TransparentProxy和RealProxy

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;        }   }

用户注册接口和实现

public interface IUserProcessor    {        void RegUser(User user);    }    public class UserProcessor : MarshalByRefObject, IUserProcessor    {        public void RegUser(User user)        {            Console.WriteLine("用户已注册。");        }    }

客户端调用

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;            }        }    }


优点:简单实现

缺点:性能差



0 0
原创粉丝点击