Nucleus.MockAOP.Net簡介
一、功能
-
基於配置文件,動態載入Aspects
-
對不同的類,指定不同的Aspects (基於正則表達式或者繼承關係)
-
對類的不同方法,指定不同的Aspects (基於正則表達式)
-
指定Aspects的相對執行順序
-
提供了一種ChainOfResponsbility模式的RealProxy實現,並提供了該RealProxy所需的Aspect的框架,及三個示例Aspect,分別用來計算執行時間、打印輸入參數和返回值、和捕捉所有異常
二、限制
-
未找到好方法將Aspect變爲無狀態,導致每new一個正常對象,都會附帶若干Aspect對象,性能受影響
-
未找到好方法最靈活的配置類、方法與Aspects的關聯,現在配置信息散落在各處,加大了對象之間的耦合,加重了Aspect對象的負擔,如現在每個Aspect對象都要判斷當前被調用的原始方法是否匹配在配置文件中的配置,若匹配才切入,否則不予理睬
-
尚未實現RealProxy的動態配置(即不同的代理策略)
三、使用
-
將希望被切入Aspect的類(即受AOP管理的類)從Nucleus.MockAOP.AspectManagedObject派生,則該類及其子類都將受AOP管理;如果某個個別子類希望脫離管理,則聲明時將AspectManaged屬性置爲false即可
Nucleus.MockAOP.AspectManagedObject定義 |
namespace Nucleus.MockAOP { [AspectManaged] public class AspectManagedObject : ContextBoundObject { } } |
希望受AOP管理的類定義 |
public class SomeBusinessClass : AspectManagedObject { public string SomeProperty { get{return "pone";} } } |
父類受AOP管理,某個子類希望脫離AOP管理 |
[AspectManaged(false)] public class SomeFreeClass : BusinessClass { } |
-
IAspect接口
IAspect定義 |
namespace Nucleus.MockAOP { public interface IAspect { IMethodReturnMessage SyncExecuteMethod(IMethodCallMessage msg); IConstructionReturnMessage SyncExecuteConstructor(IConstructionCallMessage msg); } } |
定義新的Aspect |
public class TerminatorAspect : IAspect { #region IAspect 成員 public IMethodReturnMessage SyncExecuteMethod(IMethodCallMessage msg) { return xxx; } public IConstructionReturnMessage SyncExecuteConstructor(IConstructionCallMessage msg) { return xxx; } #endregion } |
定義與ChainOfResponsbility模式的RealProxy實現合作的Aspect |
public class ExceptionAspect : BaseChainNodeAspect { protected override IMethodReturnMessage xxxxxx(IMethodCallMessage msg) { return xxx; } } |
-
在配置文件中爲類和方法指定Aspects和Aspects的相對執行順序;使用正則表達式(type_name_regex)或者繼承關係(instance_of),當在同一個type_name_pattern中同時使用時,以type_name_regex爲準
四、下載交流
-
暫時放在了xpdl_parser的網站中:Nucleus.MockAOP.Net
-
離完善還差很遠,希望得到賜教