Применение атрибута к интерфейсу с помощью PostSharp - PullRequest
8 голосов
/ 04 марта 2010

Я хочу иметь возможность применить атрибут к интерфейсу, чтобы к каждому методу в любом классе, который реализует этот интерфейс, был применен атрибут к нему.

Я предполагал, что это будет выглядеть примерно так:

[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 ]

8 голосов
/ 04 марта 2010

Вы должны использовать:

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

Или:

[Test(AttributeInheritance=MulticastInheritance.Multicast] 
public interface ISystemService 
1 голос
/ 04 марта 2010

Что я пропускаю / делаю неправильно?

Интерфейс

не имеет реализации, поэтому не может выполнять любой код OnEntry / OnExit.

Я считаю, что вы должны наследовать от класса.


Кроме того, вы можете Многоадресная передача атрибута , но вам необходимо наследовать от MulticastAttribute .

...