国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C# 面向切面編程之AspectCore實(shí)踐(二)

這篇具有很好參考價(jià)值的文章主要介紹了C# 面向切面編程之AspectCore實(shí)踐(二)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

寫(xiě)在前面

在上一篇中對(duì)AspectCore進(jìn)行了初步的了解,用于攔截的屬性加在了具體類(lèi)的方法上。

C# 面向切面編程之AspectCore初探

這一篇驗(yàn)證一下把攔截屬性加在接口上,這樣實(shí)現(xiàn)該接口的類(lèi)中所對(duì)應(yīng)的方法都會(huì)被攔截到;另外示例中還嘗試對(duì)方法的入?yún)⑦M(jìn)行了修改,驗(yàn)證了通過(guò)AspectContext可以獲得當(dāng)前方法的所有信息。

代碼實(shí)現(xiàn)

using AspectCore.DynamicProxy;
using AspectCore.DynamicProxy.Parameters;

class Program
{
    static void Main(string[] args)
    {
        ProxyGeneratorBuilder proxyGeneratorBuilder = new ProxyGeneratorBuilder();
        IProxyGenerator proxyGenerator = proxyGeneratorBuilder.Build();
        SampleInterface sampleInterface = proxyGenerator.CreateInterfaceProxy<SampleInterface, SampleClass>();
        Console.WriteLine(sampleInterface);
        var ret = sampleInterface.Foo(1);
        Console.WriteLine("ret:" + ret);
        sampleInterface.Boo();

        Console.ReadKey();
    }
}

public class SampleInterceptor : AbstractInterceptorAttribute
{
    public override Task Invoke(AspectContext context, AspectDelegate next)
    {
        try
        {
            Console.WriteLine("Call Interceptor Start");
            if (context.ImplementationMethod.Name.Equals("Foo"))
            {
                if (context.Parameters.Length > 0)
                {
                    Console.WriteLine($"Foo Parameter Value[0]:{context.Parameters[0]}");
                    context.Parameters[0] = 2;
                }
                var returnParam = context.GetReturnParameter();
                if (returnParam != null)
                {
                    Console.WriteLine($"return type: {returnParam.Type.Name}");
                }                
            }
            return context.Invoke(next);
        }
        catch (Exception ex)
        {
            throw;
        }
        finally
        {
            Console.WriteLine("Call Interceptor End");
        }
    }
}

public class SampleClass : SampleInterface
{
    public virtual int Foo(int a)
    {
        Console.WriteLine("Call Foo:" + a);
        return 1;
    }

    public virtual void Boo()
    {
        Console.WriteLine("Call Boo");
    }
     
}

[SampleInterceptor]
public interface SampleInterface
{
    int Foo(int a);

    void Boo();
}

調(diào)用示例

C# 面向切面編程之AspectCore實(shí)踐(二),C#,c#,開(kāi)發(fā)語(yǔ)言文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-796604.html

到了這里,關(guān)于C# 面向切面編程之AspectCore實(shí)踐(二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • AOP 面向切面編程 入門(mén)練習(xí)

    添加依賴(lài) Spring配置文件 接口類(lèi)和實(shí)現(xiàn)類(lèi) 切面類(lèi) 測(cè)試類(lèi)

    2024年04月11日
    瀏覽(19)
  • JAVA:面向切面編程AOP

    ? ? ? ? 把某一些功能提取出來(lái)與某一對(duì)象進(jìn)行隔離,提取之后可以對(duì)某哥單方面的功能進(jìn)行修改和擴(kuò)展 ? ? ? ? 也就是把眾多方法中的的所有公共代碼抽取出來(lái),放到某個(gè)地方集中管理 ????????對(duì)業(yè)務(wù)邏輯的各個(gè)部分進(jìn)行了隔離,從而降低業(yè)務(wù)邏輯各部分之間的耦合,

    2024年02月07日
    瀏覽(17)
  • Spring AOP:面向切面編程

    在軟件開(kāi)發(fā)中,我們經(jīng)常會(huì)遇到一些橫切關(guān)注點(diǎn)(cross-cutting concerns),如日志記錄、事務(wù)管理和安全性等。這些關(guān)注點(diǎn)不屬于特定的模塊或類(lèi),而是橫跨整個(gè)應(yīng)用程序。傳統(tǒng)的面向?qū)ο缶幊谭椒ㄍ鶗?huì)將這些關(guān)注點(diǎn)與核心業(yè)務(wù)邏輯混雜在一起,導(dǎo)致代碼的可讀性和可維護(hù)性下

    2024年02月09日
    瀏覽(22)
  • Spring面向切面編程(AOP)

    Spring面向切面編程(AOP)

    AOP(Aspect Oriented Programming),即面向切面編程,利用一種稱(chēng)為\\\"橫切\(zhòng)\\"的技術(shù),剖開(kāi)封裝的對(duì)象內(nèi)部,并將那些影響了多個(gè)類(lèi)的公共行為封裝到一個(gè)可重用模塊,并將其命名為\\\"Aspect\\\",即切面。所謂\\\"切面\\\",簡(jiǎn)單說(shuō)就是那些與業(yè)務(wù)無(wú)關(guān),卻為業(yè)務(wù)模塊所共同調(diào)用的邏輯或責(zé)任封裝

    2024年02月07日
    瀏覽(31)
  • [SSM]Spring面向切面編程AOP

    [SSM]Spring面向切面編程AOP

    目錄 十五、面向切面編程AOP 15.1AOP介紹 15.2AOP的七大術(shù)語(yǔ) 15.3切點(diǎn)表達(dá)式 15.4使用Spring的AOP 15.4.1準(zhǔn)備工作 15.4.2基于AspectJ的AOP注解式開(kāi)發(fā) 15.4.3基于XML配置方式的AOP(了解) 15.5AOP的實(shí)際案例:事務(wù)處理 15.6AOP的實(shí)際案例:安全日志 IoC使軟件組件松耦合。AOP讓你能夠捕捉系統(tǒng)中經(jīng)

    2024年02月15日
    瀏覽(28)
  • Spring第三講:SpringAOP面向切面編程

    5、1什么是AOP AOP(Aspect Orient Programming),面向切面編程,AOP 是一種編程思想,是面向?qū)ο缶幊蹋∣OP)的一種補(bǔ)充。面向切面編程,實(shí)現(xiàn)在不修改源代碼的情況下給程序動(dòng)態(tài)統(tǒng)一添加額外功能的一種技術(shù)。AOP可以攔截指定的方法并且對(duì)方法增強(qiáng),而且無(wú)需侵入到業(yè)務(wù)代碼中,使

    2024年02月12日
    瀏覽(22)
  • Spring AOP(面向切面編程)和方法攔截

    Spring AOP(面向切面編程)和方法攔截 Spring是一款廣泛使用的Java開(kāi)發(fā)框架,提供了豐富的功能和工具,用于簡(jiǎn)化企業(yè)級(jí)應(yīng)用程序的開(kāi)發(fā)。其中一個(gè)重要的特性是面向切面編程(AOP)和方法攔截。本文將介紹Spring AOP和方法攔截的概念、工作原理以及在實(shí)際開(kāi)發(fā)中的應(yīng)用。 在軟

    2024年02月05日
    瀏覽(23)
  • 認(rèn)識(shí) spring AOP (面向切面編程) - springboot

    認(rèn)識(shí) spring AOP (面向切面編程) - springboot

    本篇介紹什么是spring AOP, AOP的優(yōu)點(diǎn),使用場(chǎng)景,spring AOP的組成,簡(jiǎn)單實(shí)現(xiàn)AOP 并 了解它的通知;如有錯(cuò)誤,請(qǐng)?jiān)谠u(píng)論區(qū)指正,讓我們一起交流,共同進(jìn)步! 本文開(kāi)始 AOP: 面向切面編程,也就是面向某一類(lèi)編程,對(duì)某一類(lèi)事情進(jìn)行統(tǒng)一處理; spring AOP: 是實(shí)現(xiàn)了AOP這種思想的一

    2024年02月14日
    瀏覽(29)
  • 12.控制反轉(zhuǎn)IOC與面向切面編程AOP

    目錄 一、IOC-控制反轉(zhuǎn)。 二、AOP-面向切面編程。 IOC(Inversion of Control)是控制反轉(zhuǎn)的縮寫(xiě),指的是將對(duì)象的創(chuàng)建過(guò)程和依賴(lài)關(guān)系的處理交給外部容器來(lái)實(shí)現(xiàn),從而實(shí)現(xiàn)對(duì)象之間的解耦。因此,IOC不是容器,是一種編程思想,將對(duì)象之間的依賴(lài)關(guān)系的處理從程序中轉(zhuǎn)移到容器(

    2023年04月09日
    瀏覽(23)
  • 切面的魔力:解密Spring AOP 面向切面編程

    切面的魔力:解密Spring AOP 面向切面編程

    目錄 一、AOP簡(jiǎn)介 1.1 什么是AOP ? 1.2?什么是面向切面編程 ? 1.3?AOP 的特點(diǎn) 二、?AOP的基本概念解讀 2.1 AOP的基本概念 2.2 AOP 概念趣事解讀 三、代碼情景演示 3.1?編寫(xiě)目標(biāo)對(duì)象(超級(jí)英雄們正常的行動(dòng)) 3.2 編寫(xiě)通知類(lèi) 3.2.1?前置通知 3.2.2 后置通知 3.2.3 異常通知 3.2.4 環(huán)繞通知

    2024年02月11日
    瀏覽(89)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包