利用消息机制实现.NET AOP(面向方面编程)--通过RealProxy实现

C#动态代理的深入解析与应用 代理模式主要由以下几个核心的组成元素构成:主题(Subject):定义了RealSubject和Proxy的共用接口,这样在任何需要RealSubject的地方都可以使用它的代理Proxy。真实主题(RealSubject):包含了代理角色所代表的真实实体的业务逻辑。代理(Proxy) 阅读详情

利用消息机制实现.NET AOP(面向方面编程)--通过RealProxy实现

通过RealProxy是最简单的方法,缺点是不能同时加入多个代理,否则会抛异常。

实现步骤:

1、实现RealProxy的继承类

2、实现应用上述实现的RealProxy类的ProxyAttribute

3、把上述实现的Attribute应用到ContextBoundObject实例上

// MyProxy代码
using  System; using  System.Runtime.Remoting; using  System.Runtime.Remoting.Messaging; using  System.Runtime.Remoting.Proxies; using  System.Runtime.Remoting.Activation; using  System.Runtime.Remoting.Services; using  System.Diagnostics; namespace  DotNetAOP.UsingRealProxy {     class MyProxy:RealProxy     {         MarshalByRefObject _target = null;         public MyProxy(Type type, MarshalByRefObject target):base(type)         {             this._target = target;         }         //覆写Invoke,处理RealProxy截获的各种消息,         //此种方式最简捷,但不能截获远程对象的激活,好在我们并不是真的要Remoting         public override IMessage Invoke(IMessage msg)         {             IMethodCallMessage call = (IMethodCallMessage)msg;             IConstructionCallMessage ctr = call as IConstructionCallMessage;             IMethodReturnMessage back = null;             //构造函数,只有ContextBoundObject(Inherit from MarshalByRefObject)对象才能截获构造函数             if (ctr != null)             {                 Console.WriteLine("调用"+ctr.ActivationType.Name+"类型的构造函数");                 RealProxy defaultProxy = RemotingServices.GetRealProxy(_target);                 //如果不做下面这一步,_target还是一个没有直正实例化被代理对象的透明代理,                 //这样的话,会导致没有直正构建对象。                 defaultProxy.InitializeServerObject(ctr);                 //本类是一个RealProxy,它可通过GetTransparentProxy函数得到透明代理                 back = EnterpriseServicesHelper.CreateConstructionReturnMessage(ctr, (MarshalByRefObject)GetTransparentProxy());             }             //MarshalByRefObject对象就可截获普通的调用消息,             //MarshalByRefObject对象告诉编译器,不能将其内部简单的成员函数优化成内联代码,             //这样才能保证函数调用都能截获。             else             {                 Console.Write("调用成员函数:" + call.MethodName);                 back = RemotingServices.ExecuteMessage(_target, call);                 Console.WriteLine(",返回结果为:" + back.ReturnValue.ToString());             }             return back;         }     } }
// MyProxyAttribute
using  System; using  System.Collections.Generic; using  System.Text; using  System.Runtime.Remoting.Proxies; namespace  DotNetAOP.UsingRealProxy {     //从ProxyAttribute继承,自动实现RealProxy植入     [AttributeUsage(AttributeTargets.Class)]     class MyProxyAttribute:ProxyAttribute     {         //覆写CreateInstance函数,返回我们自建的代理         public override MarshalByRefObject CreateInstance(Type serverType)         {             MarshalByRefObject obj = base.CreateInstance(serverType);             MyProxy proxy = new MyProxy(serverType, obj);             return (MarshalByRefObject)proxy.GetTransparentProxy();         }     } }
// MyCBO代码
using  System; using  System.Collections.Generic; using  System.Text; namespace  DotNetAOP.UsingRealProxy {     [MyProxy]     class MyCBO:ContextBoundObject     {         public int Add(int a, int b)         {             return a + b;         }         public int Divide(int a, int b)         {             return a / b;         }     } }
// 测试代码
using  System; using  System.Collections.Generic; using  System.Text; namespace  DotNetAOP {     class Program     {         static void Main(string[] args)         {             UsingRealProxy.MyCBO cbo = new DotNetAOP.UsingRealProxy.MyCBO();             cbo.Add(1, 2);             Console.ReadLine();         }     } }

我曾试图实现多个RealProxy嵌套代理对象,不过最后以失败告终,不过后面的两个实现都是可以应用多个截获的。 下载:嵌套RealProxy框架的简单实现 这个框架以失败告终,原因是一个对象不能有多个代理,奇怪的是RemotingProxy又可以,还有待研究。 需要上面单个RealProxy实现的请留下Email。 查看其它框架实现请转到此页

利用消息机制实现.NET AOP(面向方面编程)--通过RealProxy实现 利用消息机制实现.NET AOP(面向方面编程)--利用RealProxy和消息接收器实现多截获 利用消息机制实现.NET AOP(面向方面编程)--利用ServerContextSink实现多截获

posted @ 2006-07-26 18:49 THIN 阅读(2886) 评论(15)   编辑 收藏 所属分类: Other 、 AOP
c#动态代理 c#动态代理核心代码,通过.netframe work 提供的realproxy类实现动态代理模式。 立即下载

相关推荐

FOC控制必看:单/双/三电阻电流采样方案全对比(附NXP实战避坑指南)

本文深入对比了FOC控制中单电阻、双电阻和三电阻电流采样方案的优劣与适用场景,重点剖析了采样时序、窗口与ADC转换的工程挑战。针对NXP平台,提供了解决采样窗口过窄的实战方案与配置指南,帮助工程师根据成本与性能需求做出最优选择,并规避常见设计陷阱。

n2o3p4的博客 414

C# 动态代理的实现 ----采用RealProxy继承实现

今天在B站学习MVC架构时,冒出了一个动态代理的概念,用于添加 Log(也能拿来进行权限限制)功能。在网上学习了一下,并实现了一段基本的代码。 动态代理类的实现,继承RealProxy,采用泛型T,指定代理的类。 class LogProxy<T> : RealProxy where T:class { object obj = null; public LogProxy(object pObj) :base(typeof(T)){ ..

fffffscs的博客 1351

告别手册!S32K3XX的eMIOS实战:从GPT定时到PWM输出,一个通道搞定电机控制

本文深入探讨了NXP S32K3XX系列MCU的eMIOS模块在电机控制中的高效应用。通过单通道实现PWM生成、输入捕获和定时中断三大功能,展示了如何简化BLDC电机控制硬件设计。文章结合RTD库与寄存器级编程,提供动态模式切换和性能优化方案,显著降低CPU负载。

weixin_42522374的博客 147

c#, AOP动态代理实现动态权限控制(一)

因最近工作需要一个动态的权限配置功能,具体实现逻辑是c#的动态代理功能,废话不多说,直接干货。 需求: 用户分为管理员、普通用户 不同用户拥有不同功能权限 用户的权限可配置 新增功能时,不用修改权限配置功能 从本篇开始我们使用动态代理完成一个案例,包含动态权限控制的核心功能。 c# 如何实现动态代理 c#实现动态代理可以使用.net framework 中提供的RealProxy类。 ...

qq_32777817的博客 1150

大白话系列:什么是微服务

用大白话和实际例子来通俗易懂地告诉你什么是微服务~

2401_87403086的博客 1242

wsl + vscode 离线配置 ERROR: Faild to download https://update.code.visualstudio.com

很多情况下是没有现成的VS Code Server程序的,需要手动下载。记住上面的Commit ID,可以通过下面的链接下载 vscode-server-linux-x64.tar.gz。然后将vscode-server-linux-x64.tar.gz上传在服务器上的$HOME/.vscode-server/bin文件夹中,解压。在wsl中下载不了 vscode 的核心。运行下面两行命令,建立空的$HOME/.vscode-server/bin文件夹。重新运行 wsl与vs的链接即可。

点云算法工程师 3790

C# 代理应用 - Cachable

放心,这次不是说设计模式中的代理模式,说的是C#的RealProxy的用法,主要用于:通过给class贴标签,让class做更多的工作,比如判断是否存在缓存,有则直接返回缓存object,没有则保存为缓存,等待下次请求是可以更快的获取数据(当然这只是其中一种常用用途,MVC的Action就是采用这种方式) 下面是序列图: .Net Object Generation interceptor...

weixin_34331102的博客 139

C语言设计模式全面解析:从理论到28个实战示例

本文系统介绍了23种经典设计模式在C语言中的实现方法。通过结构体、函数指针等技巧,C语言可以优雅地模拟面向对象特性,实现代码复用与解耦。文章分类详解了创建型、结构型、行为型三大类模式,并提供了28个完整代码示例,包括单例、策略、观察者等核心模式的精简实现。这些模式在嵌入式系统、操作系统内核等场景中广泛应用,如状态机、事件驱动等。学习C语言设计模式的关键在于理解模式意图,掌握函数指针和结构体组合等技巧,并在实际项目中灵活运用。本文为C语言开发者提供了全面的设计模式参考指南。

数字人生 364

利用消息机制实现.NET AOP(面向方面编程)--通过RealProxy实现 zz

转自 http://www.cnblogs.com/thinhunan/archive/2007/07/17/460370.html 通过RealProxy是最简单的方法,缺点是不能同时加入多个代理,否则会抛异常。实现步骤:1、实现RealProxy的继承类2、实现应用上述实现的RealProxy类的ProxyAttribute3、把上述实现的Attribute应用到Conte

虫子的专栏 1270

对halcon形状匹配算法的一点分析

基于Intel VTune Profiler对halcon形状匹配算法的一点分析

manuoo的专栏 567

华为OD机试双机位C卷-组装新的数组(Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【组装新的数组】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - 组装新的数组。

qq_45776114的博客 1145

利用消息机制实现.NET AOP(面向方面编程)--利用RealProxy和消息接收器实现多截获...

以下代码实现利用RealProxy调用MessageSink链来实现多截获 //TerminatorSink.cs using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Activation; using System.Runtime.Remoting.Contexts; using...

weixin_34179968的博客 143

五.EtherCAT开发之STM32F407ZGt6+ LAN9253 外置EEPROM配置数据含义

EtherCAT从站简称ESC,ESC在上电过程中,会自动加载EEPROM中前7个字(1word = 2 byte)到ESC寄存器。ESC寄存器总是可以被EtherCAT主站通过EtherCAT总线访问,无论PDI接口寄存器配置什么值。EEPROM存储器中的前7个字,将决定ESC的工作模式。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 3468

利用消息机制实现.NET AOP(面向方面编程)

.Net的面向方面编程

HYH791000的专栏 638

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

.NET中通过代理实现面向方面编程(AOP)

AOP是OOP的延续,Aspect Oriented Programming的缩写,即面向方面编程。AOP是GoF设计模式的延续,设计模式追求的是调用者和被调用者之间的解耦,AOP也是这种目标的一种实现。 我说到了在代码中可以利用泛型委托来封装异常处理,这样可以让程序看起来更加清晰,要想完成功能需要调用者调用指定的工厂方法才行,但要想改变某些程序员的编码习惯我想是一件比较困难的事情。有朋友说利用

cxzhq2002的杂记 859

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

NET Framework的AOP实施方法2 RealProxy

RealProxy 是 .NET Framework 中的一个类,它位于 System.Runtime.Remoting.Proxies 命名空间中。它是所有代理类必须继承的抽象基类。RealProxy 类的主要功能是在运行时动态生成一个透明代理(TransparentProxy),这个透明代理与它所代理的实际对象具有相同的类型信息

weixin_45277117的博客 1047

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

.NET中通过代理实现面向方面编程

.NET中通过代理实现面向方面编程http://hb.QQ.com  2010年04月26日15:30   IT168<br />  AOP是OOP的延续,Aspect Oriented Programming的缩写,即面向方面编程。AOP是GoF设计模式的延续,设计模式追求的是调用者和被调用者之间的解耦,AOP也是这种目标的一种实现。 <br /> <br />  我说到了在代码中可以利用泛型委托来封装异常处理,这样可以让程序看起来更加清晰,要想完成功能需要调用者调用指定的工厂方法才行,但要想改变某些程序

HYH791000的专栏 597

.net中利用代理实现AOP

.net中利用代理实现AOP 上篇文章我说到了在代码中可以利用泛型委托来封装异常处理,这样可以让程序看起来更加清晰,要想完成功能需要调用者调用指定的工厂方法才行,但要想改变某些程序员的编码习惯我想是一件比较困难的事情。有朋友说利用委托来实现异常处理并不算是真正意义上的AOP,因为传统的AOP并不需要客户端做代码结构的变更,最多也就是配置上的问题。但在.net中要想...

dhka8040652的博客 124

利用消息机制实现.NET AOP(面向方面编程)--基本概念和实现

本系列文章主要讲述如何利用.NET的Remoting消息框架实现AOP 本系列文章试图实现三种AOP实现 本系列文章以示例代码为主,对一些概念和原理不会进行过于深入的讨论 这里不谈论AOP在现实开发中是否有必要,只停留在技术实现层面 我的实现可能并不成熟,请有实际应用经验的朋友指教 ...

weixin_30925411的博客 97
上一篇: JGTM'2004 [MVP] 对MarshalByRefObject的讲解
下一篇: [网上搜集]c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
first_fish
博客等级 码龄21年 1粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值