后锐化:从方面访问已经应用的方面

时间:2018-07-20 20:56:16

标签: c# postsharp aspects

我创建了一个小的方面层次结构。 示例:

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

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

类似

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

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

PS:我确实以另一种方式解决了我的问题,但是如果有可能,那将比我的解决方案更优雅,更有效。

1 个答案:

答案 0 :(得分:2)

您可以使用方面存储库:

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

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