2

我创建了一个小的 Aspects 层次结构。例子:

public abstract class MyBaseAspectAttribute : Aspect, IAspectProvider
{
...
    public IEnumerable<AspectInstance> ProvideAspects( object targetElement )
    {
    }
...
}

我想知道在 ProvideAspects 中是否有任何方法可以找出是否以及哪些其他 Aspect 已应用于 targetElement - 并获取对 Aspect 实例的引用。

就像是

PostShart.GetAspects(targetElement).OfType<MyBaseAspectAttribute>();

(我的意图:检查是否已经添加了某个方面,如果是,则修改它)

PS:我确实以另一种方式解决了我的问题,但如果这可能的话,它会比我的解决方案更优雅、更有效。

4

1 回答 1

2

您可以使用方面存储库:

http://www.postsharp.net/blog/post/New-in-PostSharp-40-Aspect-Repository http://doc.postsharp.net/t_postsharp_aspects_iaspectrepositoryservice

如果要修改方面实例,则需要将实例存储在存储在静态字段中的字典中。字典可以从方面构造函数中填充,因此它不仅涵盖了 的情况IAspectProvider,而且还涵盖了方面作为自定义属性应用时的情况。

于 2018-07-21T07:11:46.267 回答