自定义匹配规则探索:微软企业库PolicyInjection的CustomAttributeMatchingRule

需积分: 9 0 下载量 36 浏览量 更新于2024-09-10 1 收藏 106KB DOCX 举报
"微软企业库5.0教程,PolicyInjection模块,AOP,自定义Matching Rule,CustomAttributeMatchingRule,CustomMatchingRule" 在微软企业库5.0中,PolicyInjection模块是一个强大的工具,它允许开发者通过面向切面编程(AOP)来插入横切关注点,如日志、事务管理等,而无需直接修改业务逻辑代码。本篇教程将继续深入探讨PolicyInjection模块中的自定义Matching Rule,特别是CustomAttributeMatchingRule和CustomMatchingRule。 首先,CustomAttributeMatchingRule是一个灵活的匹配规则,它允许开发者根据自定义特性来决定哪些方法或类应该触发策略。相比于预定义的TagAttributeMatchingRule,CustomAttributeMatchingRule不再局限于特定的TagAttribute特性,而是可以使用任何自定义特性来标记需要拦截的方法或类。它的主要配置参数包括: 1. AttributeTypeName:指定自定义特性的完全限定名称。这样,PolicyInjection模块在运行时会寻找带有该特性标记的方法或类。 2. SearchInheritanceChain:一个布尔值,决定是否在类的继承链中搜索特性。默认为false,意味着只检查当前类,不考虑基类。 下面是一个简单的示例来说明CustomAttributeMatchingRule的使用: 首先,我们需要定义一个自定义特性,例如`MyCustomAttribute`: ```csharp [AttributeUsage(AttributeTargets.Method)] public class MyCustomAttribute : Attribute {} ``` 然后,我们可以在需要拦截的方法或类上应用这个自定义特性: ```csharp public abstract class CustomAttrTest { [MyCustomAttribute] public abstract string CwInfo(); } public class ChildCustomerAttrTest : CustomAttrTest { public override string CwInfo() { // 实现方法 } } ``` 若SearchInheritanceChain配置为false,PolicyInjection模块在执行ChildCustomerAttrTest的CwInfo方法时,由于没有直接在ChildCustomerAttrTest类上找到MyCustomAttribute,所以不会应用相关的策略。若将其设置为true,那么即使MyCustomAttribute是在基类上定义的,PolicyInjection也会识别并执行相应的策略。 接下来,我们来看CustomMatchingRule,这是一个更加通用的匹配规则,允许开发者提供完全自定义的匹配逻辑。开发者需要创建一个类实现`MatchingRule`接口,并在其中实现`Matches(MethodBase method)`方法。这个方法返回true或false,以确定给定的方法是否应触发策略。例如: ```csharp public class MyCustomMatchingRule : MatchingRule { public override bool Matches(MethodBase method) { // 在这里添加自定义匹配逻辑 return method.Name.StartsWith("My"); } } ``` 配置时,将这个自定义匹配规则的类型名填入PolicyInjection的配置中,这样PolicyInjection就会根据提供的匹配逻辑来决定何时应用策略。 通过CustomAttributeMatchingRule和CustomMatchingRule,开发者可以更精细地控制PolicyInjection模块的行为,实现更复杂和特定的AOP需求。这两个匹配规则的使用,大大增强了微软企业库5.0的灵活性和适应性,使其能更好地服务于各种项目需求。