.Net AOP(二)远程代理Remoting/RealProxy
2016-03-27 10:52
387 查看
远程代理
1、使用.Net Remoting/RealProxy
采用TransparentProxy和RealProxy实现对象的代理,实现思路如下:Client -TransparentProxy - RealProxy - Target Object
下面实现自定义的TransparentProxy和RealProxy
用户注册接口和实现
客户端调用
优点:简单实现
缺点:性能差
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; } } }
优点:简单实现
缺点:性能差
相关文章推荐
- Linux系统启动过程
- 一次nginx 502 & mysql not contect 排错经历
- vs2013配置OpenGL
- linux下安装android studio(看到的一些好的链接)
- .NET AOP(一)七种AOP实现方法
- tomcat部署
- linux下chkconfig使用
- Linux虚拟机安装
- 关于opencv编译出现importerror:../../lib/libopencv_core.so cannot share or open问题
- CentOS 7安装MYSQL5.7(access denied问题解决方法)
- 修改linux终端命令行颜色
- ActiveMQ实现负载均衡+高可用部署方案
- 性能测试知多少---性能测试工具原理与架构
- 解决:bash: ./a.out: Permission denied
- centos 自带mysql卸载时出现无法卸载情况
- 架构师之路(39)---IoC框架
- arm linux 内核生成过程
- Apache 服务器配置教程
- Dockerfile
- 修改linux下mysql的编码