更新:我不清楚应该在什么情况下使用 AOP?由于我们可以将 AOP 用于日志记录、安全性(身份验证),请建议我们可以利用 AOP 的其他一些场景。
可以使用 AOP 在应用程序进程中的不同运行线程之间共享数据吗?
更新:我不清楚应该在什么情况下使用 AOP?由于我们可以将 AOP 用于日志记录、安全性(身份验证),请建议我们可以利用 AOP 的其他一些场景。
可以使用 AOP 在应用程序进程中的不同运行线程之间共享数据吗?
当您需要减少代码库中的“横切”功能时,面向方面的编程是理想的选择。这意味着您拥有类需要实现的公共代码(日志记录、安全性),但您不能将该功能抽象为基类。
因此,AOP 实际上是在运行时或编译时将这些功能小块嵌入到存在“横切”功能的代码中。
资源
目前,AOP 没有内置在 C# 中,但有以下框架可以构建 AOP:
线程数据的 AOP
通常,使用 AOP 跨线程共享数据不是可行的方法。开发人员还可以使用其他技术来做到这一点:
[ThreadStaticAttribute]
将此属性附加到字段以指示 .NET 运行时以下字段对于多个线程是唯一的
同步(最常用的技术) 使用Mutexes
、Semaphores
、ReaderWriter
锁 和EventWaitHandles
同步从多个线程访问本地或全局数据。在 C# 中,该lock
语句是Monitor
类的语法糖,可用于“锁定”从单个线程对对象的访问。
我喜欢将 AOP 视为智能的幕后代码生成(编译时)/执行(运行时),因此您基本上可以做任何事情。它具有传统代码生成的所有优点(甚至更多)而没有缺点(例如可维护性)。