使用.Net Remoting/RealProxy
采用TransparentProxy和RealProxy实现对象的代理,实现思路如下:Client -TransparentProxy - RealProxy - Target Object
下面实现自定义的TransparentProxy和RealProxy
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Remoting.Messaging; using System.Runtime.Remoting.Proxies; using System.Text; using System.Threading.Tasks; namespace MyRealProxyApplication { 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("方法执行后"); } } }
using System; namespace MyRealProxyApplication { 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 void RegUser(User user) { Console.WriteLine("用户已注册。"); } public class User { public string Name{get;set;} public string PassWord{get;set;} }
客户端调用
public class Transfer { 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; } } }