更新:我不清楚AOP应该在什么情况下使用?由于我们可以使用 AOP 来实现日志记录、安全性(身份验证),请建议我们可以利用 AOP 的其他一些场景。

AOP可以在应用程序进程中的不同运行线程之间共享数据吗?

有帮助吗?

解决方案

当您需要减少代码库中的“横切”功能时,面向方面的编程是理想的选择。这意味着您拥有类需要实现的通用代码(日志记录、安全性),但您无法将该功能抽象到基类中。

因此,AOP 实际上是在运行时或编译时将这些功能片段缩小并嵌入到存在“横切”功能的代码中。

资源

目前,AOP 尚未内置于 C# 中,但以下框架可以构建 AOP:

线程数据的AOP

一般来说,使用 AOP 跨线程共享数据并不是正确的方法。开发人员还可以使用其他技术来做到这一点:

  • [ThreadStaticAttribute] 将此属性附加到字段以指示 .NET 运行时以下字段对于多个线程将是唯一的

  • 同步(最常见的技术) 使用 Mutexes, Semaphores, ReaderWriter 锁和 EventWaitHandles 同步多个线程对本地或全局数据的访问。在 C# 中, lock 语句是语法糖 Monitor 类,可用于“锁定”单个线程对对象的访问。

其他提示

我喜欢将AOP视为智能幕后代码生成(编译时)/执行(运行时),因此您几乎可以做任何事情。它具有传统代码生成的所有优点(和更多),没有它的缺点(例如可维护性)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top