Postsharp: доступ к уже примененным аспектам из аспекта
Я создал небольшую иерархию аспектов. Пример:
public abstract class MyBaseAspectAttribute : Aspect, IAspectProvider
{
...
public IEnumerable<AspectInstance> ProvideAspects( object targetElement )
{
}
...
}
Мне было интересно, есть ли какой-нибудь способ внутри ProvideAspect, чтобы выяснить, применяются ли и какие другие аспекты уже к targetElement, и получить ссылку на экземпляр Aspect.
Что-то вроде
PostShart.GetAspects(targetElement).OfType<MyBaseAspectAttribute>();
(мое намерение: проверить, добавлен ли определенный аспект, и если да, то изменить его)
PS: я решил свою проблему по-другому, но если бы это было возможно, я нашел бы более элегантное и эффективное решение, чем мое.
1 ответ
Вы можете использовать репозиторий аспектов:
http://www.postsharp.net/blog/post/New-in-PostSharp-40-Aspect-Repository http://doc.postsharp.net/t_postsharp_aspects_iaspectrepositoryservice
Если вы хотите изменить экземпляр аспекта, вам нужно сохранить экземпляры в словаре, хранящемся в статическом поле. Словарь может быть заполнен из конструктора аспекта, поэтому он не только охватывает случай IAspectProvider
, но также когда аспект применяется в качестве пользовательского атрибута.