c# - Postsharp:从方面访问已应用的方面

标签 c# postsharp aspects

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

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

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

类似

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

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

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

最佳答案

您可以使用方面存储库:

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

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

关于c# - Postsharp:从方面访问已应用的方面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51450270/

相关文章:

c# - 使用 Polly 重试之前正确的日志记录方法是什么

c# - 使用 JSON.NET JsonTextReader 在 C# 中读取 BigInteger

c# - AspectF(一种Fluent Aspect Framework)是一种类AOP的设计,可以放心使用吗?

java - 添加一个方面来捕获异常并返回 null

c# - Linq To Sql 一对多

c# - 日志记录结构 - 当必须记录每个方法时如何构建?

c# - PostSharp 和 CaSTLe 动态代理有什么区别?

asp.net-core - .NET CLI(dotnet build)和 AOP 库

java - "after() : staticinitialization(*)"的@AspectJ 语法

c# - WMI 查询子域中的 DNS CNAME