最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#靜態(tài)代碼織入AOP組件之Rougamo的使用詳解

 更新時(shí)間:2024年01月15日 10:06:23   作者:rjcql  
Rougamo是一個(gè)靜態(tài)代碼織入的AOP組件,同為AOP組件較為常用的有Castle、Autofac、AspectCore等,下面就跟隨小編一起來學(xué)習(xí)一下它的具體使用吧

寫在前面

關(guān)于肉夾饃組件的官方介紹說明:

Rougamo是一個(gè)靜態(tài)代碼織入的AOP組件,同為AOP組件較為常用的有Castle、Autofac、AspectCore等,與這些組件不同的是,這些組件基本都是通過動(dòng)態(tài)代理+IoC的方式實(shí)現(xiàn)AOP,是運(yùn)行時(shí)完成的,而Rougamo是編譯時(shí)直接修改目標(biāo)方法織入IL代碼的。如果你還知道一個(gè)AOP組件"PostSharp",那么Rougamo就是類似Postsharp的一個(gè)組件,Postsharp是一個(gè)成熟穩(wěn)定的靜態(tài)代碼織入組件,但PostSharp是一款商業(yè)軟件,一些常用的功能在免費(fèi)版本中并不提供。

老規(guī)矩從NuGet 安裝組件 Rougamo.Fody

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

以下是最基礎(chǔ)的一個(gè)應(yīng)用肉夾饃AOP組件的實(shí)現(xiàn)代碼

 注入代碼主體[LoggingAttribute]:

    public class LoggingAttribute : MoAttribute
    {
        private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
 
        public override void OnEntry(MethodContext context)
        {
            // 從context對(duì)象中能取到包括入?yún)?、類?shí)例、方法描述等信息
            Logger.Info("方法執(zhí)行前");
        }
 
        public override void OnException(MethodContext context)
        {
            Logger.Error("方法執(zhí)行異常", context.Exception);            
        }
 
        public override void OnSuccess(MethodContext context)
        {
            Logger.Info("方法執(zhí)行成功后");
        }
 
        public override void OnExit(MethodContext context)
        {
            Logger.Info("方法退出時(shí),不論方法執(zhí)行成功還是異常,都會(huì)執(zhí)行");
        }
    }
 
    // 3.應(yīng)用Attribute
    public class Service
    {
        [Logging]
        public static int Sync(Model model)
        {
            return model.Id;
        }
 
        [Logging]
        public async Task<Data> Async(int id)
        {
            return await Task.Run(() =>
            {
                var data = new Data();
                data.Id = id;
                return data;
            });
        }
    }
 
    public class Model
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
 
    public class Data
    {
        public int Id { get; set; }
    }

調(diào)用代碼:

    public static void Main(string[] args)
    {
        Console.WriteLine("Start...");
 
        var config = new NLog.Config.LoggingConfiguration();
 
        // Targets where to log to: File and Console
        var logfile = new NLog.Targets.FileTarget("logfile") { FileName = "file.txt" };
        var logconsole = new NLog.Targets.ConsoleTarget("logconsole");
 
        // Rules for mapping loggers to targets            
        config.AddRule(LogLevel.Info, LogLevel.Fatal, logconsole);
        config.AddRule(LogLevel.Debug, LogLevel.Fatal, logfile);
 
        // Apply config           
        LogManager.Configuration = config;
 
        var service = new Service();
        var data = service.Async(1);
        var id = Service.Sync(new Model() { Id = 1, Name = "DemoModel" });
        Console.WriteLine($"Data Id: {data.Id}, Model Id: {id}");
 
        Console.ReadLine();
    }

調(diào)用示例

到此這篇關(guān)于C#靜態(tài)代碼織入AOP組件之Rougamo的使用詳解的文章就介紹到這了,更多相關(guān)C#靜態(tài)代碼織入AOP組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#中Monitor對(duì)象與Lock關(guān)鍵字的區(qū)別分析

    C#中Monitor對(duì)象與Lock關(guān)鍵字的區(qū)別分析

    這篇文章主要介紹了C#中Monitor對(duì)象與Lock關(guān)鍵字的區(qū)別,需要的朋友可以參考下
    2013-06-06
  • C#中使用Override和New關(guān)鍵字進(jìn)行版本控制

    C#中使用Override和New關(guān)鍵字進(jìn)行版本控制

    在?C#?中,override?和?new?關(guān)鍵字用于控制類之間的成員方法的隱藏和重寫,理解它們之間的差異和使用場(chǎng)景對(duì)于設(shè)計(jì)靈活且易于維護(hù)的代碼至關(guān)重要,在這篇博客中,我們將詳細(xì)探討這兩個(gè)關(guān)鍵字的用法,并通過示例來說明它們的實(shí)際應(yīng)用,需要的朋友可以參考下
    2024-10-10
  • C#操作windows注冊(cè)表的方法

    C#操作windows注冊(cè)表的方法

    這篇文章主要介紹了C#操作windows注冊(cè)表的方法,涉及C#針對(duì)注冊(cè)表的讀取與寫入技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C# 中Stopwatch和timer的實(shí)現(xiàn)示例

    C# 中Stopwatch和timer的實(shí)現(xiàn)示例

    本文主要介紹了C# 中Stopwatch和timer的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-01-01
  • C# 建造者模式(Builder Pattern)詳細(xì)講解

    C# 建造者模式(Builder Pattern)詳細(xì)講解

    建造者模式是一種創(chuàng)建型設(shè)計(jì)模式,通過將復(fù)雜對(duì)象的構(gòu)建過程與其表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示,它適用于構(gòu)建過程復(fù)雜且涉及多個(gè)步驟的場(chǎng)景,本文介紹C# 建造者模式(Builder Pattern)詳細(xì)講解,感興趣的朋友一起看看吧
    2025-03-03
  • 詳解C#泛型的類型參數(shù)約束

    詳解C#泛型的類型參數(shù)約束

    這篇文章主要介紹了C#泛型的類型參數(shù)約束的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-07-07
  • C#常見應(yīng)用函數(shù)實(shí)例小結(jié)

    C#常見應(yīng)用函數(shù)實(shí)例小結(jié)

    這篇文章主要介紹了C#常見應(yīng)用函數(shù),結(jié)合實(shí)例形式總結(jié)分析了C#常用的時(shí)間、URL、HTML、反射、小數(shù)運(yùn)算等相關(guān)函數(shù),需要的朋友可以參考下
    2017-01-01
  • C#實(shí)現(xiàn)獲取不同對(duì)象中名稱相同屬性的方法

    C#實(shí)現(xiàn)獲取不同對(duì)象中名稱相同屬性的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)獲取不同對(duì)象中名稱相同屬性的方法,涉及C#操作類與對(duì)象屬性的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • C#實(shí)現(xiàn)簡易點(diǎn)餐功能

    C#實(shí)現(xiàn)簡易點(diǎn)餐功能

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡易點(diǎn)餐功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 詳解C#批量插入數(shù)據(jù)到Sqlserver中的四種方式

    詳解C#批量插入數(shù)據(jù)到Sqlserver中的四種方式

    本文主要講解一下在Sqlserver中批量插入數(shù)據(jù)。文中大數(shù)據(jù)批量插入方式一和方式四盡量避免使用,而方式二和方式三都是非常高效的批量插入數(shù)據(jù)方式,需要的朋友可以看下
    2016-12-12

最新評(píng)論

彭水| 南昌市| 罗甸县| 芦溪县| 顺义区| 苍南县| 吉安县| 苏尼特左旗| 突泉县| 库伦旗| 五莲县| 藁城市| 新化县| 青铜峡市| 清涧县| 肇庆市| 清新县| 望江县| 木兰县| 台南市| 建始县| 怀安县| 清原| 延吉市| 孝义市| 溧阳市| 金乡县| 九龙县| 日喀则市| 都兰县| 开江县| 彭泽县| 土默特左旗| 呼图壁县| 修水县| 永川市| 大新县| 赫章县| 石狮市| 论坛| 修武县|