[EntLib]微软企业库5.0 学习之路——第九步、使用PolicyInjection模块进行AOP—PART1——基本使用介绍

     继续微软企业库5.0的学习之路,今天主要介绍的是企业库的PolicyInjection模块,这个模块是为了方便我们在项目中使用AOP而生的模块,本篇主要介绍的PolicyInjection模块信息、内置的匹配规则和内置处理模块使用。

 

一、PolicyInjection模块基本信息介绍

PolicyInjection模块是在企业库3.0才正式引入的模块,简称PIAB(Policy Injection Application Block),这个模块的主要功能是方便我们在项目开发中进行AOP(面向切面编程),以简化开发内容。有关AOP方面的知识在园子里已经有很多朋友介绍过了,我这边就不重复介绍了,如不了解的朋友可以到张逸的这篇文章中学习:AOP技术基础

在.NET下其实已经有很多成熟的AOP项目,比如:PostSharp、Spring.net、Jboss等等,而我今天介绍的企业库的PIAB同样也是实现AOP功能,但是PIAB可以和企业库中的其它几大模块,如Logging(日志)、Exception(异常)、Security(权限)等进行很好的合并,只需简单的配置立刻可以实现AOP功能。

由于在国内对PIAB的文章比较少,所以想深入的朋友可以看下Artech写的《EnterLib PIAB深入剖析》系列博文不过Artech写的比较早,是08年写,当时的企业库版本还是3.1的版本,所以与现在的企业库5.0版本已经有许多不同的地方,不过其原理并没有变,值得一看

如果想了解PIAB在企业库配置工具怎么配置以及基本使用方法可以看看huangcong写的这篇:Policy Injection Application Block

pic47

上图就是PolicyInjection模块的配置图,从图中的图示就可以看出,中间是具体的AOP策略,左边是这个AOP策略所要的验证规则,而右边则是这个AOP策略的具体调用处理操作。

注意:

1、每个策略配置所使用的验证规则最好只使用一个,如果使用一个以上则会出现AOP效果无法实现。

2、需要实现AOP策略的类必须实现类MarshalByRefObject或这个类必须实现一个接口

 

二、PolicyInjection模块内置验证规则使用介绍

PolicyInjection模块继承了企业库优秀的易用性和扩展性,与其他几大模块一样,其内置了许多常用的验证规则已方便我们开发人员的使用,主要有以下11种验证规则:

1、Assembly Matching Rule——程序集验证规则

2、Custom Attribute Matching Rule——自定义特性验证规则

3、Custom Matching Rule——自定义验证规则

4、Member Name Matching Rule——名称验证规则

5、Method Signature Matching Rule——方法签名验证规则

6、Namespace Matching Rule——命名空间验证规则

7、Parameter Type Matching Rule——参数类型验证规则

8、Property Matching Rule——属性验证规则

9、Return Type Matching Rule——返回类型验证规则

10、Tag Attribute Matching Rule——Tag特性验证规则

11、Type Matching Rule——类型验证规则

 

下面我详细介绍一下这些内置验证规则的使用方法:

1、Assembly Matching Rule——程序集验证规则

这个验证是对程序集名进行匹配,已达到AOP的效果,这个验证规则只接收一个参数:Assembly Name。

这个参数Assembly Name可接收的字符串类型有以下几种:

1、name and version,名称和版本号

如:Microsoft.Practices.EnterpriseLibrary.Common, Version=5.0.414.0

2、name、version and curlture,名称、版本号和Culture

如:Microsoft.Practices.EnterpriseLibrary.Common, Version=5.0.414.0,Culture=neutral

3、full assembly name,程序集的全名,但是不能包含“.dll”后缀名

如:AOPAssembly

 

2、Custom Attribute Matching Rule——自定义特性验证规则 和 Custom Matching Rule——自定义验证规则

这2个验证是为开发者预留的,有关这2个验证规则我在下一篇文章中进行介绍。

 

3、Member Name Matching Rule——名称验证规则

这个验证规则也比较简单,对符合配置名称的类或类成员进行验证,这个验证规则只接收一个参数:Member Names(支持通配符)

见下面的代码,我想在执行Test方法的时候进行AOP策略,只需将类继承MarshalByRefObject,然后在企业库配置工具进行配置,添加Member Name Matching Rule,将Test方法名添加到配置工具中:

public class MyAOP : MarshalByRefObject
{
    public void Test(string aa)
    {
        Console.WriteLine(aa);
    }
}

配置图如下:

pic48

4、Method Signature Matching Rule——方法签名验证规则

这个验证规则比较特殊,是根据方法签名进行AOP策略,方法签名的一般为:Test(string aa)

这个验证规则接收2个参数:

1、Match,匹配的方法名,这个Match可以接收通配符匹配,“*”(表示多个字符),“?”(表示零个或一个字符),“[]”(通过在[]中书写字符范围)

如:

Test*,支持Testa,Testab等方法名的匹配

Test?,支持Test,Testa等方法名的匹配

Test[1-9],支持Test1,Test2等方法名的匹配

2、Parameters,方法参数列表,需要制定参数名称和参数类型

需要注意的是,参数类型最好不要从配置工具旁边的“类型选择器”,因为通过这个类型选择器选择的参数类型会包含程序集的版本号等无用信息,会导致AOP策略失败,所以建议手写类型。

如:Name:aa,Parameter Type Name:System.String

实例代码如下:

public class AOPClass : MarshalByRefObject
{
    public void Test(string aa)
    {
        Console.WriteLine(aa);
    }

    public void Test2(string aa)
    {
        Console.WriteLine(aa);
    }

    public void Test3(string aa)
    {
        Console.WriteLine(aa);
    }
}

配置图如下:

pic49

 

5、Namespace Matching Rule——命名空间验证规则

这个验证规则类似于上面的Member Name Matching Rule,只不过Namespace Matching Rule是匹配命名空间验证,这个验证规则接收一个参数:Namespaces(支持通配符)

这个参数Namespaces是一个集合,可以配置需要进行AOP策略的命名空间

如:AOPAssembly.Test

需要注意的是,如果需要进行匹配的命名是不是根级命名空间,比如:AOPAssembly.Test,那么不能仅仅写根命名空间AOPAssembly,这样将会匹配不到。

配置图如下:

pic50

 

6、Parameter Type Matching Rule——参数类型验证规则

这个验证是对方法参数进行匹配,接收一个参数Parameters Type

这个参数Parameters Type也是一个集合,可以配置需要进行AOP策略的参数信息

这个Parameters Type主要有2个子参数:Parameter Kind(参数方向,有Input,Output,InputOrOutput和ReturnValue5种类型)和Match(匹配名)

如:Parameter Kind:Input,Match:bb

示例代码如下:

public void AssemblyAOP(string bb)
{
    Console.WriteLine(bb);
}

配置图如下:

pic51

 

7、Return Type Matching Rule——返回类型验证规则

这个类型验证规则是根据方法返回值的类型进行匹配,接收一个参数Return Type

这个Return Type可以是类型名,也可以使类名

如:System.String,Class1

示例代码如下:

public string RelaceString(string aa)
{
    aa = "replace";
    return aa;
}

配置图如下:

pic52

 

8、Tag Attribute Matching Rule——Tag特性验证规则

这个验证规则是根据特性(Attribute)——TagAttribute来进行验证的,这个验证规则接收一个参数:Tag Attribute。

这个参数Tag Attribute是接收配置在类、方法或属性的特性参数(支持通配符)。

注意Tag Attribute这个特性类需要引入命名空间:using Microsoft.Practices.Unity.InterceptionExtension;

示例代码如下:

[Tag("Test2")]
public void Test2(string aa)
{
    Console.WriteLine(aa);
}

pic53

 

9、Type Matching Rule——类型验证规则

这个验证则是根据类型进行匹配,接收一个列表参数:Type Matches。

在Type Matches中添加需要匹配的类型,可以使类名,也可以是包含命名空间的完整名

如:AOPTest,AOPAssembly.AOPTest

配置图如下:

pic54

 

以上就是本文的所有内容了,本文主要介绍了企业库的PolicyInjection模块内置的验证规则的使用方法以及各个内置验证规则的一些使用注意点,下篇将介绍自定义规则和内置的处理操作。

 

微软企业库5.0 学习之路系列文章索引:

第一步、基本入门

第二步、使用VS2010+Data Access模块建立多数据库项目

第三步、为项目加上异常处理(采用自定义扩展方式记录到数据库中) 

第四步、使用缓存提高网站的性能(EntLib Caching)

第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——上篇

第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——中篇 

第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——下篇

第六步、使用Validation模块进行服务器端数据验证

第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—上篇

第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—下篇

第八步、使用Configuration Setting模块等多种方式分类管理企业库配置信息

第九步、使用PolicyInjection模块进行AOP—PART1——基本使用介绍

第九步、使用PolicyInjection模块进行AOP—PART2——自定义Matching Rule

第九步、使用PolicyInjection模块进行AOP—PART3——内置Call Handler介绍

第九步、使用PolicyInjection模块进行AOP—PART4——建立自定义Call Handler实现用户操作日志记录 

第十步、使用Unity解耦你的系统—PART1——为什么要使用Unity?

第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(1)

第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(2)

第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(3)

第十步、使用Unity解耦你的系统—PART3——依赖注入

第十步、使用Unity解耦你的系统—PART4——Unity&PIAB

扩展学习:

扩展学习篇、库中的依赖关系注入(重构 Microsoft Enterprise Library)[转]

 

posted @ 2010-09-01 10:01 kyo-yo 阅读(...) 评论(...) 编辑 收藏