使用PostSharp将属性应用于接口

时间:2010-03-04 04:06:10

标签: c# interface attributes postsharp

我希望能够将一个属性应用于接口,以便实现该接口的任何类中的每个方法都将应用该属性。

我认为它看起来像这样:

[Serializable]
[AttributeUsage(AttributeTargets.All, Inherited = true)]
public sealed class TestAttribute : OnMethodBoundaryAspect
{
    ...
}

然而,当我将它应用于如下界面时,在实现接口的类中调用该方法时,永远不会访问属性中的OnEntry / OnExit代码:

[Test]
public interface ISystemService
{
    List<AssemblyInfo> GetAssemblyInfo();
}

如果我在实现类本身中应用该属性,如下所示,它可以正常工作:

[Test]
public class SystemService : ISystemService
{
    ...
}

我错过了什么/做错了什么?

2 个答案:

答案 0 :(得分:8)

你必须使用:

[MulticastAttributeUsage(..., Inheritance=MulticastInheritance.Multicast)]
public sealed class TestAttribute : OnMethodBoundaryAspect 

或者:

[Test(AttributeInheritance=MulticastInheritance.Multicast] 
public interface ISystemService 

答案 1 :(得分:1)

  

我错过了什么/做错了什么?

接口没有实现,因此无法执行任何'OnEntry / OnExit代码'。

我相信你应该从一个班级继承。


此外,您可以Multicast the attribute,但您需要继承MulticastAttribute