AOP就是可以在一個已有的類方法中動態地嵌入代碼,可以通過預編譯方式和運行期動態代理實現在不修改源代碼的情況下給程序動態統一添加功能。前提必須是被切入的類是通過IOC容器來控制的。
Castle通過DynamicProxy來實現動態代理每一個切面方法均需要實現接口IInterceptor。
下面通過代碼的方式來學習下AOP,新建一個切入類
<span style="font-size:14px;">public class LoggingInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
Console.WriteLine("方法前調用");
try
{
invocation.Proceed();
}
catch (Exception)
{
Console.WriteLine("方法出錯調用");
throw;
}
finally
{
Console.WriteLine("方法最後調用");
}
}
}</span>
即在原來的方法中加入TryCatch塊,並記錄日誌。客戶端調用的時候只需要在類上加標籤:
<span style="font-size:14px;">[Interceptor(typeof(LoggingInterceptor))]
public class WenZhouCharge:ICharge
{
}</span>
前提是WenXhouCharge這個類是受Windsor IOC容器控制的。
這樣在WenXhouCharge每個方法外面均會套上TryCatch並記錄日誌。