我创建了一个小的方面层次结构。 示例:
public abstract class MyBaseAspectAttribute : Aspect, IAspectProvider
{
...
public IEnumerable<AspectInstance> ProvideAspects( object targetElement )
{
}
...
}
我想知道在ProvideAspects内部是否有任何方法可以找出是否已经将哪些Aspect以及哪些其他Aspect应用于targetElement并获取对Aspect实例的引用。
类似
PostShart.GetAspects(targetElement).OfType<MyBaseAspectAttribute>();
(我的意图:检查是否已添加某个方面,如果是,则进行修改)
PS:我确实以另一种方式解决了我的问题,但是如果有可能,那将比我的解决方案更优雅,更有效。
答案 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作为自定义属性应用时的情况。