AOP在 .NET中的七种实现方法



7Approaches for AOP in .Net

AOP在 .NET中的七种实现方法

Here are all the ways that I can think of to add AOPto your application. This mostly focus on the interception side
of things,because once you have that, everything else it just details.

在这里列表了我想到的在你的应用程序中加入AOP支持的所有方法。这里最主要的焦点是拦截,因为一旦有了拦截其它的事情都是细节。


Approach

方法


Advantages

优点


Disadvantages

缺点


Remoting Proxies

远程代理


Easy to implement, because of the .Net framework support

容易实现,因为有.NET
框架的支持。


Somewhat heavy
weight

Can only be used on interfaces or MarshalByRefObjects

微显重量级

仅在接口或
MarshalByRefObjects 上使用


Derivingfrom ContextBoundObject


ContextBoundObject 派生


Easiest to implement

Native support for call interception

很容易实现

原生支持调用拦截


Very costly in terms of performance

非常昂贵的性能代价


Compile-time subclassing

( Rhino Proxy )

编译时子类化


Easiest to understand

很容易理解


Interfaces or virtual methods only

仅用于接口或虚方法


Runtime subclassing

( Castle Dynamic Proxy )

运行时子类化


Easiest to understand

Very flexible

很容易理解

非常灵活


Complex implementation (but already
exists)

Interfaces or virtual methods only

复杂的实现(已经实现)

仅用于接口或虚方法


Hooking into the profiler API

( Type Mock )

分析 API
钩子


Extremely powerful

极端强大


Performance?

Complex implementation (COM API, require separate runner, etc)

性能未知

复杂实现(COM API,需要单独运行等)


Compile time IL-weaving

( Post Sharp / Cecil )

编译时 IL
织入


Very powerful

Good performance

非常强大

良好的性能


Very hard to implement

实现非常困难


Runtime IL-weaving

( Post Sharp / Cecil )

运行时 IL
织入


Very powerful

Good performance

非常强大

朗好的性能


Very hard to implement

实现非常困难

文献来源:http://ayende.com/blog/2615/7-approaches-for-aop-in-net

时间: 2024-08-03 00:08:58

AOP在 .NET中的七种实现方法的相关文章

Linux 中的七种文件类型

LINUX中的七种文件类型d  目录文件.l  符号链接(指向另一个文件,类似于瘟下的快捷方式).s  套接字文件.b  块设备文件,二进制文件.c  字符设备文件.p  命名管道文件.-  普通文件,或更准确地说,不属于以上几种类型的文件

js oop中的三种继承方法

JS OOP 中的三种继承方法: 很多读者关于js opp的继承比较模糊,本文总结了oop中的三种继承方法,以助于读者进行区分. <继承使用一个子类继承另一个父类,子类可以自动拥有父类的属性和方法.(继承的两方,发生在两个类之间)> 一.通过object实现继承 1:定义父类 function Parent(){} 2:定义子类 funtion Son(){} 3:通过原型给Object对象添加一个扩展方法. Object.prototype.customExtend = function(p

将dll文件注入到其他进程中的一种新方法

http://www.45it.com/windowszh/201212/33946.htm http://www.hx95.cn/Article/OS/201212/65095.html 我们知道将动态连接库注入到其他进程中有很多种方法.最常见的方法是使用钩子函数(Hook),但是这种方法主要有两个缺点:第一如果某个进程没有加载User32.dll,那么Hook DLL将永远也不会被加载.第二Hook DLL加载的时机问题,只有在进程发出User32调用的时候, Hook DLL才有可能被加载

C#中的两种debug方法介绍

第一种:需要把调试方法改成debug 代码用 #if DEBUG 包裹 using System; using System.Collections.Generic; using System.Text; using System.IO; namespace SplitPackage { public static class EnvConfig { static EnvConfig() { #if DEBUG ToolsPath = @"D:\workspace\shopstyle\tool&

8086中的七种寻址方式

寻址方式 8086/8088有七种基本的寻址方式:立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对寻址,基址变址寻址,相对基址变址寻址. 其中,后五种寻址方式(即直接寻址.寄存器间接寻址.寄存器相对寻址.基址变址寻址和相对基址变址寻址)属于存储器寻址,用于说明操作数或操作数地址所在存储单元的地址.这五种方式也就是确定存放操作数的存储单元有效地址EA的方法,这里所说的有效地址就是在前面一节讲存储器分段中所说的段内偏移地址. 除了这些基本的寻址方式以外,还有固定寻址和I/O端口寻址等,但不

敏捷开发的七种主流方法

XP XP(极限编程)的思想源自 Kent Beck和Ward Cunningham在软件项目中的合作经历.XP注重的核心是沟通.简明.反馈和勇气.因为知道计划永远赶不上变化,XP无需开发人员在软件开始初期做 出很多的文档.XP提倡测试先行,为了将以后出现bug的几率降到最低. SCRUM SCRUM是一种迭代的增量化过程,用于产品开发或工作管理.它是一种可以集合各种开发实践的经验化过程框架.SCRUM中发布产品的重要性高于一切. 该方法由Ken Schwaber和 Jeff Sutherlan

简单介绍 java 中的几种 &quot;通用方法“

前言 Java中,除了基本的数值类型,其他所有数据类型(包括数组)都是对象. 而Object这个类是所有类的超类,它提供的方法,自然能够使用于它的所有子类(所有非基本数值类型). 本文介绍了Object类的几种经典方法,还算比较常用. Class getClass(),ClassSuperclass () 返回包含对象信息的类对象.此方法将在以后讲反射机制的时候详细讲解. Object clone () 拷贝方法.此方法将在以后专门开篇讲解. int hashCode () 返回对象的哈希值.

RBAC类在ThinkPHP中的四种使用方法

第一类:放在登陆控制器的登陆操作中 1.RBAC::authenticate(); 用于在用户表中查找表单提交的用户名的数据,实质上就是一条用户表查寻语句,=====> return M(modle)->where(array)->find();这个操作有两个参数 a.array()数组的写法及作用和表查寻数组一样,=====>array(‘字段’=>‘值’,‘字段’=>array('条件','值')); b.model就是表名,默认是配制参数 C('USER_AUTH

Java中的七种排序方式代码示例

package baseJava; /** * @title SortMethods.java * @author DonsenChen * @Date 2018年5月2日 上午10:16:03 * @Description */ public class SortMethods { public static void main(String[] args) { int[] arr = { 3, 7, 9, 1, 4, 8, 2, 6, 5 }; binarySort(arr); bubble