配色: 字号:
NET中AOP方便之神SheepAspect
2016-09-24 | 阅:  转:  |  分享 
  
NET中AOP方便之神SheepAspect

?

SheepAspect简介以及代码示列:

?

SheepAspect是一个AOP框架为.NET平台,深受AspectJ。它静织目标组件作为一个编译后的任务(编译时把AOP代码植入)。

多有特性时,可根据参数值设置先后进入顺序





下面开始代码实现之旅:

一、新建控制台程序:方案名称:SheepAectTest



二、NuGet上搜索SheepAspect进行安装



三、安装完毕后的样子





成员的切入点类型(SelectMethdos以下图等):?



"saql":

Criteria Argument Examples Name string Name:‘Customer’

Name:(‘Service’|‘Repository’) Namespace string !Namespace:‘System.’ ImplementsType TypePointcut ImplementsType:’System.Collections.IEnumerable’

ImplementsType:(Name:‘Repository’|Namespace:‘.DataContexts’) AssignableToType TypePointcut AssignableToType:(‘System.Collections.’&Interface)

AssignableToType:Namespace:‘System.Collections.’ HasMethod MethodPointcut HasMethod:Name:‘Get’

HasMethod:(Public&Args(‘System.Int32’) HasProperty PropertyPointcut HasProperty:Name:’Length’

HasProperty:Type:Implements:’.Service’ HasField FieldPointcut HasField:Name:(‘_createdDate’|‘_entryDate’)

HasField:((Public&Static)|Protected) ThisAspect (none) ThisAspect

Implements:ThisAspect

Namespace:’Sheep.’&!ThisAspect HasCustomAttributeType TypePointcut HasCustomAttributeType:Impwww.visa158.comlementsType:’BindableAttribute’ InheritsType TypePointcut InheritsType:Namespace:’System.Collections’ Interface (none) Interface

!Interface Abstract (none) Abstract&Name:’Strategy’ ValueType (none) ValueType&HasMethod:Name:’Equals’ Class (none) Class&Implements:’Sheep.Irepository’ ?

特性植入示列:

一、新建特性

publicclassLogAttribute:Attribute

{

publicstringName{get;set;}



publicLogAttribute(stringname)

{

Name=name;

}

}

二、新建一个测试类TestClass.cs

1

2

3

4

5

6

7

8

9

10

11

12

13 public?class?TestClass

{

????[Log("获取的第一个方法")]

????public?string?Get()

????{

????????return?"test1";

????}

?

????public?string?Get2()

????{

????????return?"test2";

????}

} 三、更改SampleAspect为:HasCustomAttributeType:''SheepAectTest.Attr.LogAttribute''?>?命名空间+类名



四:编写测试代码:







?输出结果:

?

如果我们在AOP中更改结果呢?



?

?输出结果:



?

获取特性的属性:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30 [Aspect]

??public?class?SampleAspect

??{

??????[SelectMethods("HasCustomAttributeType:''SheepAectTest.Attr.LogAttribute''")]

??????public?void?PublicMethods(){www.hunanwang.net}

?

??????[Around("PublicMethods",Priority=100)]

??????public?object?LogAroundMethod(MethodJointPointjp)

??????{

?

??????????try

??????????{

??????????????var?log=(LogAttribute)jp.Method.GetCustomAttributes(typeof(LogAttribute),?false)[0];

??????????????//这样可以获取属性名称:log.Name;

??????????????//jp.Args?->包含传递参数

??????????????var?result=jp.Execute();

?

??????????????if?(jp.Method.ReturnType==?typeof(void))

??????????????????result=?"{void}";

?

??????????????result=?"AOP更改结果";

??????????????return?result;

??????????}

??????????catch?(Exceptione)

??????????{

?

??????????????throw;

??????????}

??????}

??}

多个特性注入顺序以:Priority属性值控制优先级较低的值;





献花(0)
+1
(本文系白狐一梦首藏)