c# - 有什么方法可以在不使用属性装饰的情况下将 AOP 应用于 .NET 库?

标签 c# .net aop event-sourcing

<分区>

我完全理解我的问题很奇怪,可能有很多更好的方法可以实现我的目标,因此我们将不胜感激。

基本思想是跟踪在运行时对特定类型实体的特定属性所做的所有更改,而无需修改它们的代码。

假设我有一个名为 Foo 的实体,如下所述:

class Foo
{
    private string _bar;
    public string Bar 
    { 
        get { return _bar; } 
        set 
        {
            // some logic here...
            _bar = value;
            // some logic here... 
        }
    }
}

基本上我想要一个允许我编写如下代码的库:

Hook.For<Foo>()
    .OnSet(foo => foo.Bar)
    .Action((foo, value) => 
    {
        // save the state of the foo instance along with the value passed to the setter
    });

我了解所需的功能涉及添加一些额外的构建步骤来修改输出汇编 IL 代码。语法不需要这么流畅,我什至不介意 JSON 或 XML 配置。主要思想不是更改我们应用程序的大量不良遗留代码,而是使用外部监控(用于调试目的)。

是否有任何 AOP 框架可以在全局范围内应用这样的方面,而不需要我用特性装饰每个属性或类?

最佳答案

看起来 PostSharp 提供了在现有代码上应用外部方面的能力,如下文所述:http://programmersunlimited.wordpress.com/2011/07/27/applying-aspects-to-3rd-party-assemblies-using-postsharp/

我现在将采用此解决方案。

关于c# - 有什么方法可以在不使用属性装饰的情况下将 AOP 应用于 .NET 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25736590/

相关文章:

aop - 什么是面向方面编程?

c# - 遍历很多行

c# - Regex.Replace 中的 MatchEvaluator 如何工作?

.net - dotnet System.Web.Caching.Cache 与 System.Runtime.Caching.MemoryCache

c# - Entity Framework 中计算属性的数据绑定(bind)

java - IDEA 无法在插件依赖项中找到 AspectJ 编译器 .jar

c# - "00000000000000000000000000000"匹配正则表达式 "^[1-9]|0$"

c# - asp 按钮不适用于 js 脚本

c# - 传递具有继承对象值的基础对象 (Json)

java - AspectJ\Spring AOP - 替换整个方法