PostSharp接口方法属性

时间:2019-07-18 23:06:38

标签: c# c#-4.0 postsharp

想象一下我有以下东西:

public interface IMyInterface {
    void DoSomething();
}

public class MyClass: IMyInterface {
    public void DoSomething() {
        // do something
    }
}

然后,我要创建一个方法属性,如下所示:

[PSerializable]
[AttributeUsage(AttributeTargets.Method)]
public class NotNullAttribute : MethodImplementationAspect
{
    public override void OnInvoke(MethodInterceptionArgs args)
    {
        throw new NullReferenceException();
    }
}

现在,我知道可以将其应用于类方法。

但是,我希望能够执行以下操作:

public interface IMyInterface {
    [NotNull]
    void DoSomething();
}

然后,所有实现此方法的类都应用了拦截器。不幸的是,这在编译时给了我一个错误。

这可能吗?我试图在文档中找到答案,但没有成功。

如果这 是可能的,有人可以帮助我了解如何实现此目标吗?

1 个答案:

答案 0 :(得分:1)

我能正常工作...

我在属性定义和抽象方法上都缺少属性。

工作示例:

[PSerializable]
[MulticastAttributeUsage(MulticastTargets.Method, TargetMemberAttributes = MulticastAttributes.Instance)]
[AttributeUsage(AttributeTargets.Method)]
public class NotNullAttribute : MethodInterceptionAspect
{
    public override void OnInvoke(MethodInterceptionArgs args)
    {
        throw new NullReferenceException();
    }
}

以及使用方法:

public interface IMyInterface {
    [NotNull(AttributeInheritance = MulticastInheritance.Multicast)]
    void DoSomething();
}

public class MyClass: IMyInterface {
    public void DoSomething() {
        // do something
    }
}