关注开源代码的实际应用
PostSharp是一个开放的开台,开发人员可以编写插件或扩展来增强PostSharp。
1、PostSharp4ViewState 自动管理ASP.NET控件的状态,只需在控件的字段或属性上声明一个自定义Attribute就可进行值的存储,并可控制存储在ViewState还是在ControlState。详细介绍
2、PostSharp4EntLib 组合了Enterprise Library Policy Injection与编译时织入而Remoting Proxyies限制的优点
3、Software Transactional Memory 使得程序可以像使用传统数据库的事务一样处理内存中的数据。使用隐乐观锁(implicit optimistic locking),支持嵌套事务。
4、PostSharp4Spring PostSharp与Spring.net的简单整合
5、Entity Framework Bindings 想要使用Microsoft Entity Framework却又讨厌那些编写僵硬的代码?有了PostSharp4ET就可以通过PostSharp生成代码。作者:Ruurd Boeke
6、Log4PostSharp 将 log4net封装成一个简单的自定义Attribute(在MSIL层面生成优化过的IL指令)。trace your programs using a single custom attribute. Log4PostSharp emits optimal instructions for you. Yes, just like hand-tuned code!
7、Build to Manage for .NET 一个Eclipse项目,可使用IBM的Build to Manage平台生成.NET程序。
8、PostSharp4Unity 使类可配置且无需工厂方法就可使用Unity http://www.codeplex.com/unity,同时旧的构造器仍可用。
9、PostSharpAspNet 使得PostSharp可用在Asp.net项目上。
10、DesignByContract 透明地往类或方法中添加前置条件、后置条件及常量。
用过NHibernte的人都知道需要在每个实体类的public属性前加上virtual关键字,才可以使用NHibernate的延迟加载(Lazy-loading)的功能。大多数情况下,没有谁对这种开发方式有意见,但是在我看来这是一种丑陋的开发方式,并且有时会漏写virtual关键字需要在程序进行时才能通过抛出的异常知道问题所在。这里通过AOP框架Postsharp解决此问题。
1、Postsharp程序集或代码可从http://www.postsharp.org/网站下载。下载“Unsealer”并将“Unsealer.Weaver.dll”与“Unsealer.psplugin”相关文件复制到Postsharp安装目录下Plugins文件夹下。在NHibernate实体类所在项目中引用PostSharp.Public.dll和Unsealer.dll。
2、两种方式任选一种:①在每个实体类前加上[Unseal]特性;②在AssemblyInfo.cs文件中加上[assembly: Unseal(AttributeTargetTypes = "*")]。
这样就无需再为NHibernate实体类属性加上virtual了。
注:通过此种方式定义实体类时,任何实体类不可定义为sealed类型。
AOP(ASPect-Oriented Programming,面向方面编程),它是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。我们把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不 大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、异常捕获、事务处理、缓存等。
目前在.Net下实现AOP的方式分为两大类:
一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代或修饰原有对象行为的执行,例如Castle的AspectSharp;
二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。动态代理实现方式利用.Net的 Attribute和.Net Remoting的代理技术,对对象执行期间的上下文消息进行截取,并以消息传递的方式执行,从而可以在执行期间加入相关处理逻辑实现面向方面的功能;而 静态织入的方式实现一般是要依靠一些第三方框架提供特定的语法,例如PostSharp,它的实现方式是采用 MSIL Injection和MSBuild Task在编译时置入方面的代码,从而实现AOP。
一篇转自http://www.rainsts.net/article.asp?id=438关于PostSharp的文章。
PostSharp与其它AOP框架一样,可以减少代码行数并且可以改进合乎逻辑的耦合,因此他可以帮助我们建立更稳定、更清洁的设计和更廉价的源代码维 护。与Aspect#、Spring.net之类的AOP框架相比,PostSharp更容易入门并掌握,下面是一个简单的应用范例: