首页 > 解决方案 > 是否可以在它实现的项目之外使用实现 Fody 编织器的属性?

问题描述

在已实现该属性的项目之外的方法上使用实现 Fody 编织器的属性时,我无法拦截方法连接点。

我已经在项目中实现了 MethodDecorator.Fody 编织器,但是当我尝试将属性添加到项目外的任何方法时,编织不会发生。它虽然在同一个项目中工作。

[AttributeUsage(AttributeTargets.Method)]
public class RelayExceptionsAttribute : Attribute, IMethodDecorator
{
    public void Init(object instance, MethodBase method, object[] args)
    { }
    public void OnException(Exception exception)
    {
        Console.WriteLine(exception.Message);
    }
    public void OnEntry() { }

    public void OnExit() { }
}

当我在同一项目中的方法上使用此属性时,按预期命中 OnException(和属性中的其他方法)。当我将它放在项目外部的方法上(但将项目属性定义为引用)时,不会发生拦截。

标签: c#aopfody

解决方案


将模块应用于 MethodDecorator.Fody 实现

[module: RelayExceptions]
[AttributeUsage(AttributeTargets.Method)]
    public class RelayExceptionsAttribute : Attribute, IMethodDecorator
    {
        public void Init(object instance, MethodBase method, object[] args)
        { }
        public void OnException(Exception exception)
        {
            Console.WriteLine(exception.Message);
        }
        public void OnEntry() { }

        public void OnExit() { }
    }

在另一个有参考提及的项目中[模块:RelayExceptions]

[module: RelayExceptions]

class Test{
[RelayExceptions]
public void AnyMethod()
{
//some code
}
}

推荐阅读