Я хочу смочь применить атрибут к интерфейсу так, чтобы каждому методу в любом классе, который реализует тот интерфейс, относились к атрибуту он.
Я предположил, что это будет выглядеть примерно так:
[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
{
...
}
Что я пропускаю/делаю неправильно?
Вы должны использовать:
[MulticastAttributeUsage(..., Inheritance=MulticastInheritance.Multicast)]
public sealed class TestAttribute : OnMethodBoundaryAspect
Или:
[Test(AttributeInheritance=MulticastInheritance.Multicast]
public interface ISystemService
Что я упускаю / делаю неправильно?
Интерфейс не имеет реализации, поэтому не может выполнить какой-либо код OnEntry / OnExit.
Я считаю, что вы должны наследовать от класса.
Кроме того, вы можете Многоадресную рассылку атрибута , но вам необходимо унаследовать от MulticastAttribute .