.Net AOP 各种IoC框架下实现AOP

.Net AOP(五) 各种IoC框架下实现AOP

首先介绍几种笔者常见的IOC框架

Unity:微软patterns&practicest团队开发的IOC依赖注入框架,支持AOP横切关注点。
MEF(Managed Extensibility Framework):是一个用来扩展.NET应用程序的框架,可开发插件系统。
Spring.NET:依赖注入、面向方面编程(AOP)、数据访问抽象,、以及ASP.NET集成。
Autofac:最流行的依赖注入和IOC框架,轻量且高性能,对项目代码几乎无任何侵入性。
Ninject:基于.NET轻量级开源的依赖注入IOC框架

Castle
AOP框架

     Encase 是C#编写开发的为.NET平台提供的AOP框架。Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式。这种部署方面(aspects)的方法帮助缺少经验的开发人员提高开发效率。

NKalore是一款编程语言,它扩展了C#允许在.net平台使用AOP。NKalore的语法简单、直观,它的编译器是基于Mono C#编译器(MCS)。NKalore目前只能在命令行或#Develop内部使用。NKalore兼容公共语言规范CLS(Common Language Specification),它可以在任何.NET开发环境中使用,包括微软的Visual Studio .NET。

PostSharp读取.NET字节模块,转换成对象模型。让插件分析和转换这个模型并写回到MSIL。PostSharp使开发程序分析应用程序容易得像分析代码规则和设计模式,它使程序开发的思想变革为面向方面软件开发(AOSD/AOD)思想。

 AspectDNG的目标是为.NET开发人员提供简单而功能强大的AOP-GAOP实现。它效仿Java下的开源工具AspectJ 和 Spoon,成熟程度也很接近它们。

 RAIL(Runtime Assembly Instrumentation Library) 开源项目可以在C#程序集加载和运行前进行处理控制调整和重新构建。C#在CLR中,我们已经能够动态加载程序集并且获得程序集中的类和方法,RAIL(Runtime Assembly Instrumentation Library)的出现填补了CLR处理过程中的一些空白。

SetPoint是一款.NET框架下的全功能(full-featured)AOP引擎.它着重为称为语义切点(semantic pointcuts)的定义依赖RDF/OWL的使用.它的功能为一个IL-level,highly dynamic weaver&LENDL,一个引人注目的定义语言、、、、、、

DotNetAOP为 CLR language提供AOP 框架基础属性。

NAop是一个DotNet下的AOP框架。

AspectSharp是DotNet下的免费AOP框架,它以Dynamic Proxies和XML作为配置文件。

      

一个Castle的实现

首先下载Castle.Windsor.dll

自定义Interceptor

[csharp]  view plain  copy
  1. public class MyInterceptor : IInterceptor  
  2.     {  
  3.         public void Intercept(IInvocation invocation)  
  4.         {  
  5.             PreProceed(invocation);  
  6.             invocation.Proceed();  
  7.             PostProceed(invocation);  
  8.         }  
  9.         public void PreProceed(IInvocation invocation)  
  10.         {  
  11.             Console.WriteLine("方法执行前");  
  12.         }  
  13.   
  14.         public void PostProceed(IInvocation invocation)  
  15.         {  
  16.             Console.WriteLine("方法执行后");  
  17.         }  
  18.     }  
用户注册接口和实现

[csharp]  view plain  copy
  1. public interface IUserProcessor  
  2.     {  
  3.         void RegUser(User user);  
  4.     }  
  5.   
  6.     public class UserProcessor : IUserProcessor  
  7.     {  
  8.         public virtual void RegUser(User user)  
  9.         {  
  10.             Console.WriteLine("用户已注册。Name:{0},PassWord:{1}", user.Name, user.PassWord);  
  11.         }  
  12.     }  
客户端调用

[csharp]  view plain  copy
  1. public class Client  
  2.     {  
  3.         public static void Run()  
  4.         {  
  5.             try  
  6.             {  
  7.                 ProxyGenerator generator = new ProxyGenerator();  
  8.                 MyInterceptor interceptor = new MyInterceptor();  
  9.                 UserProcessor userprocessor = generator.CreateClassProxy<UserProcessor>(interceptor);  
  10.                 User user= new User() { Name = "lee", PassWord = "123123123123" };  
  11.                 userprocessor.RegUser(user);  
  12.             }  
  13.             catch (Exception ex)  
  14.             {  
  15.                 throw ex;  
  16.             }  
  17.         }  
  18.     }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值