有没有办法使用拦截但独立于 AOP 框架

本文关键字:独立 AOP 框架 有没有 | 更新日期: 2023-09-27 18:37:08

我将首先指定我是拦截新手。

我想通过引入 Interception 来替换我项目的一些现有实现,但我注意到它实际上使我与后面的 AOP 框架非常紧密耦合(Castle.DynamicProxyUnity.InterceptionLinFu.AOP,同样的故事)。如果我必须在它们之间切换怎么办?(原因有很多)。

因此,每当我必须创建不同的拦截器时,这些拦截器必须符合特定的AOP框架。始终需要携带 AOP 框架特定的调用信息(从而引用 AOP 程序集)

显示带有 Castle DynamicProxy 的"之前"拦截器的简单示例:

public abstract class BeforeInterceptor : IInterceptor 
{
     void IInterceptor.Intercept(IInvocation invocation) 
     {
       Before(invocation);
       invocation.Proceed();
     }
     protected abstract void Before(IInvocation invocation);
}

据我了解,必须将调用进行到拦截器实现中,以便在目标上调用方法时更好地控制。

您有什么意见和建议。也许我从错误的角度看待这一点。

PS:使用这样的库进行DI时,情况并非如此,没有这种紧密耦合。

有没有办法使用拦截但独立于 AOP 框架

将拦截器耦合到 DI 实现并不是那么糟糕。代码位于侦听器中的原因是因为它不属于其方法被截获的类。这通常是你不希望与你的类耦合的一些行为,它超出了该类的责任范围。因此,如果你耦合你的拦截器而不是你的"主"类,那么这是一个不错的权衡。它使这些类保持分离。

此外,DI 容器的设置不必与相关类位于同一项目中。如果你愿意,你可以有一个温莎安装程序来连接你的类和拦截器,用于温莎,另一个用于统一。这是重复的,但事实上,你可以同时拥有两者,这意味着你在技术上没有与任何一个耦合。

拦截器中的代码通常非常少。如果它做任何太复杂的事情,那么也许它不属于那里。