Fody MethodDecorator无法正常工作

时间:2016-07-19 03:01:51

标签: fody

我正在尝试使用Fody创建一个方法装饰器,但它给了我以下错误:

example code

我已经特别注意不要将我的IMethodDecorator包装在任何名称空间中,就像许多网上提到的那样。以下是我在控制台应用程序中尝试的示例代码。

IMethodDecorator

using System;
using System.Reflection;


    public interface IMethodDecorator
    {
        void OnEntry(MethodBase method);
        void OnExit(MethodBase method);
        void OnException(MethodBase method, Exception exception);
    }

MethodDecoratorAttribute

using System;
using System.Diagnostics;
using System.Reflection;
using FODYPOC;

// Atribute should be "registered" by adding as module or assembly custom attribute
[module: MethodDecorator]

namespace FODYPOC
{
// Any attribute which provides OnEntry/OnExit/OnException with proper args
    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Assembly | AttributeTargets.Module)]
    public class MethodDecoratorAttribute : Attribute, IMethodDecorator
    {
        // instance, method and args can be captured here and stored in attribute instance fields
        // for future usage in OnEntry/OnExit/OnException

        public MethodDecoratorAttribute() { }

        public void OnEntry(MethodBase method)
        {
            Console.WriteLine();
        }

        public void OnExit(MethodBase method)
        {
            Console.WriteLine();
        }

        public void OnException(MethodBase method, Exception exception)
        {
            Console.WriteLine();
        }
    }

    public class Sample
    {
        [MethodDecorator]
        public void Method()
        {
            Debug.WriteLine("Your Code");
        }
    }
}

有人能指出我正确的方向吗?它看起来很简单,我知道我在某个地方犯了一个非常愚蠢的错误。

1 个答案:

答案 0 :(得分:0)

显然最新版本的MethodDecorator.Fody(目前版本0.9.0.6)无效。将版本降级到版本0.8.1.1为我解决了这个问题。

经过一番调查,看来两个版本的界面方法签名不同。因此,当我使用新包时,它并不期望将MethodBase作为参数,并且由于没有找到与它期望的接口匹配的任何内容,因此它抛出了错误。