C#静态代码织入AOP组件之Rougamo的使用详解

 更新时间:2024年01月15日 10:06:23   作者:rjcql  
Rougamo是一个静态代码织入的AOP组件,同为AOP组件较为常用的有Castle、Autofac、AspectCore等,下面就跟随小编一起来学习一下它的具体使用吧

写在前面

关于肉夹馍组件的官方介绍说明:

Rougamo是一个静态代码织入的AOP组件,同为AOP组件较为常用的有Castle、Autofac、AspectCore等,与这些组件不同的是,这些组件基本都是通过动态代理+IoC的方式实现AOP,是运行时完成的,而Rougamo是编译时直接修改目标方法织入IL代码的。如果你还知道一个AOP组件"PostSharp",那么Rougamo就是类似Postsharp的一个组件,Postsharp是一个成熟稳定的静态代码织入组件,但PostSharp是一款商业软件,一些常用的功能在免费版本中并不提供。

老规矩从NuGet 安装组件 Rougamo.Fody

代码实现

以下是最基础的一个应用肉夹馍AOP组件的实现代码

 注入代码主体[LoggingAttribute]:

    public class LoggingAttribute : MoAttribute
    {
        private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
 
        public override void OnEntry(MethodContext context)
        {
            // 从context对象中能取到包括入参、类实例、方法描述等信息
            Logger.Info("方法执行前");
        }
 
        public override void OnException(MethodContext context)
        {
            Logger.Error("方法执行异常", context.Exception);            
        }
 
        public override void OnSuccess(MethodContext context)
        {
            Logger.Info("方法执行成功后");
        }
 
        public override void OnExit(MethodContext context)
        {
            Logger.Info("方法退出时,不论方法执行成功还是异常,都会执行");
        }
    }
 
    // 3.应用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; }
    }

调用代码:

    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();
    }

调用示例

到此这篇关于C#静态代码织入AOP组件之Rougamo的使用详解的文章就介绍到这了,更多相关C#静态代码织入AOP组件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#中Monitor对象与Lock关键字的区别分析

    C#中Monitor对象与Lock关键字的区别分析

    这篇文章主要介绍了C#中Monitor对象与Lock关键字的区别,需要的朋友可以参考下
    2013-06-06
  • C#中使用Override和New关键字进行版本控制

    C#中使用Override和New关键字进行版本控制

    在 C# 中,override 和 new 关键字用于控制类之间的成员方法的隐藏和重写,理解它们之间的差异和使用场景对于设计灵活且易于维护的代码至关重要,在这篇博客中,我们将详细探讨这两个关键字的用法,并通过示例来说明它们的实际应用,需要的朋友可以参考下
    2024-10-10
  • C#操作windows注册表的方法

    C#操作windows注册表的方法

    这篇文章主要介绍了C#操作windows注册表的方法,涉及C#针对注册表的读取与写入技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • C# 中Stopwatch和timer的实现示例

    C# 中Stopwatch和timer的实现示例

    本文主要介绍了C# 中Stopwatch和timer的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-01-01
  • C# 建造者模式(Builder Pattern)详细讲解

    C# 建造者模式(Builder Pattern)详细讲解

    建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示,它适用于构建过程复杂且涉及多个步骤的场景,本文介绍C# 建造者模式(Builder Pattern)详细讲解,感兴趣的朋友一起看看吧
    2025-03-03
  • 详解C#泛型的类型参数约束

    详解C#泛型的类型参数约束

    这篇文章主要介绍了C#泛型的类型参数约束的相关资料,文中讲解非常细致,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下
    2020-07-07
  • C#常见应用函数实例小结

    C#常见应用函数实例小结

    这篇文章主要介绍了C#常见应用函数,结合实例形式总结分析了C#常用的时间、URL、HTML、反射、小数运算等相关函数,需要的朋友可以参考下
    2017-01-01
  • C#实现获取不同对象中名称相同属性的方法

    C#实现获取不同对象中名称相同属性的方法

    这篇文章主要介绍了C#实现获取不同对象中名称相同属性的方法,涉及C#操作类与对象属性的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • C#实现简易点餐功能

    C#实现简易点餐功能

    这篇文章主要为大家详细介绍了C#实现简易点餐功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 详解C#批量插入数据到Sqlserver中的四种方式

    详解C#批量插入数据到Sqlserver中的四种方式

    本文主要讲解一下在Sqlserver中批量插入数据。文中大数据批量插入方式一和方式四尽量避免使用,而方式二和方式三都是非常高效的批量插入数据方式,需要的朋友可以看下
    2016-12-12

最新评论