Применение атрибута к использованию интерфейса 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
{
    ...
}

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

8
задан krisg 4 March 2010 в 04:19
поделиться

2 ответа

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

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

Или:

[Test(AttributeInheritance=MulticastInheritance.Multicast] 
public interface ISystemService 
8
ответ дан 5 December 2019 в 18:58
поделиться

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

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

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


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

1
ответ дан 5 December 2019 в 18:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: