您的位置:首页 > 运维架构

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

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

[b]一、PolicyInjection模块基本信息介绍[/b]

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





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


注意:

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

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



[b]二、PolicyInjection模块内置验证规则使用介绍[/b]

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);
}
}


配置图如下:





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);
}
}


配置图如下:





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

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

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

如:AOPAssembly.Test

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

配置图如下:





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);
}


配置图如下:





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

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

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

如:System.String,Class1

示例代码如下:

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


配置图如下:





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);
}






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

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

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

如:AOPTest,AOPAssembly.AOPTest

配置图如下:





以上就是本文的所有内容了,本文主要介绍了企业库的PolicyInjection模块内置的验证规则的使用方法以及各个内置验证规则的一些使用注意点,下篇将介绍自定义规则和内置的处理操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐