亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#面向切面編程之AspectCore用法詳解

 更新時間:2024年01月16日 10:00:11   作者:rjcql  
AspectCore?是Lemon名下的一個國產(chǎn)Aop框架,提供了一個全新的輕量級和模塊化的Aop解決方案,下面我們就來深入了解下AspectCore在C#中的具體使用吧

寫在前面

AspectCore 是Lemon名下的一個國產(chǎn)Aop框架,提供了一個全新的輕量級和模塊化的Aop解決方案。面向切面也可以叫做代碼攔截,分為靜態(tài)和動態(tài)兩種模式,AspectCore 可以實現(xiàn)動態(tài)代理,支持程序運(yùn)行時在內(nèi)存中“臨時”生成 AOP 動態(tài)代理類。

老規(guī)矩從 Nuget 安裝 AspectCore.Extensions.DependencyInjection 包。

代碼實現(xiàn)

using AspectCore.DynamicProxy;
 
public class Program
{
    public static void Main(string[] args)
    {
        Console.WriteLine("Start...");
        ProxyGeneratorBuilder proxyGeneratorBuilder = new ProxyGeneratorBuilder();
        using (IProxyGenerator proxyGenerator = proxyGeneratorBuilder.Build())
        {
            Person p = proxyGenerator.CreateClassProxy<Person>();
            Console.WriteLine(p.GetType().BaseType);
            p.Say($"{Environment.NewLine} Hello World!");
        }
        Console.WriteLine("End");
        Console.ReadLine();
    }
}
 
public class CustomInterceptor : AbstractInterceptorAttribute
{
    public async override Task Invoke(AspectContext context, AspectDelegate next)
    {
        try
        {
            Console.WriteLine("Before service call");
            await next(context);
        }
        catch (Exception)
        {
            Console.WriteLine("Service threw an exception!");
            throw;
        }
        finally
        {
            Console.WriteLine("After service call");
        }
    }
}
 
public class Person
{
    [CustomInterceptor]
    public virtual void Say(string msg)
    {
        Console.WriteLine("service calling..." + msg);
    }
}

調(diào)用示例

如圖,代理類將Say方法包裹了起來。

如果修改一下CustomInterceptor 的Invoke方法,可以直接根據(jù)條件控制代碼的分支跳轉(zhuǎn)。

public class CustomInterceptor : AbstractInterceptorAttribute
{
    public async override Task Invoke(AspectContext context, AspectDelegate next)
    {
        try
        {
            Console.WriteLine("Before service call");
            if (false)
                await next(context);
            else
                await Task.Delay(1000);
        }
        catch (Exception)
        {
            Console.WriteLine("Service threw an exception!");
            throw;
        }
        finally
        {
            Console.WriteLine("After service call");
        }
    }
}

運(yùn)行代碼 Person中的Say方法本體就被跳過了:

到此這篇關(guān)于C#面向切面編程之AspectCore用法詳解的文章就介紹到這了,更多相關(guān)C# AspectCore內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#實現(xiàn)關(guān)閉子窗口而不釋放子窗口對象的方法

    C#實現(xiàn)關(guān)閉子窗口而不釋放子窗口對象的方法

    下面小編就為大家?guī)硪黄狢#實現(xiàn)關(guān)閉子窗口而不釋放子窗口對象的方法 。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • C# 中 “$” 符號的作用以及用法詳解

    C# 中 “$” 符號的作用以及用法詳解

    這篇文章主要介紹了C# 中 “$” 符號的作用以及用法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Unity OnGUI實時顯示游戲FPS

    Unity OnGUI實時顯示游戲FPS

    這篇文章主要為大家詳細(xì)介紹了Unity OnGUI實時顯示游戲FPS,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • c# socket網(wǎng)絡(luò)編程接收發(fā)送數(shù)據(jù)示例代碼

    c# socket網(wǎng)絡(luò)編程接收發(fā)送數(shù)據(jù)示例代碼

    這篇文章主要介紹了c# socket網(wǎng)絡(luò)編程,server端接收,client端發(fā)送數(shù)據(jù),大家參考使用吧
    2013-12-12
  • C#獲取系統(tǒng)當(dāng)前日期和時間的示例詳解

    C#獲取系統(tǒng)當(dāng)前日期和時間的示例詳解

    這篇文章主要為大家詳細(xì)介紹了C#如何使用DateTime的Now靜態(tài)屬性動態(tài)獲得系統(tǒng)當(dāng)前日期和時間,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下
    2024-01-01
  • Unity調(diào)用打印機(jī)打印圖片

    Unity調(diào)用打印機(jī)打印圖片

    這篇文章主要為大家詳細(xì)介紹了Unity通過調(diào)用打印機(jī)打印圖片的代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Socket不能選擇本地IP連接問題如何解決

    Socket不能選擇本地IP連接問題如何解決

    本文將介紹一個不要手動,要用程序自動實現(xiàn) ,可以綁定本地的任何IP地址,有需求的朋友可以參考下
    2012-11-11
  • c#中Empty()和DefalutIfEmpty()用法分析

    c#中Empty()和DefalutIfEmpty()用法分析

    這篇文章主要介紹了c#中Empty()和DefalutIfEmpty()用法,以實例形式分析了針對不同情況下Empty()和DefalutIfEmpty()用法區(qū)別,需要的朋友可以參考下
    2014-11-11
  • 深入理解C#委托delegate的使用

    深入理解C#委托delegate的使用

    本文主要介紹了C#委托delegate的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C#中String.PadRight方法的具體使用

    C#中String.PadRight方法的具體使用

    本文主要介紹了C#中String.PadRight方法的具體使用, 返回一個指定長度的新字符串,其中在當(dāng)前字符串的結(jié)尾填充空格或指定的Unicode字符,下面就來詳細(xì)的了解一下
    2024-01-01

最新評論