gpt4 book ai didi

c# - 如何在单个类上禁用默认的 CaSTLe 拦截器?

转载 作者:行者123 更新时间:2023-11-30 17:54:45 28 4
gpt4 key购买 nike

在我正在处理的一个应用程序中,我们使用了 CaSTLe Windsor 的一些 AOP 工具,主要是为了调试/性能分析目的记录方法进入/退出点和时间。这工作正常,除了因为我们在整个容器中使用默认拦截器,它适用于所有内容,包括 Logging 类,所以日志最终会被解释它如何进入和退出日志写入方法的消息堵塞。

在其他类上,我可以使用自定义 IInterceptorSelector 以及类上的 Intercept 属性来覆盖默认值,但是通过查看 CaSTLe 文档我看不到任何等效的 DoNotIntercept 类型的属性。我为我的日志记录类创建了一个 NullInterceptorSelector,它返回一个空列表,但这似乎是一种疯狂的解决方法,我相信必须有更好的方法来做到这一点 - 谁能建议怎么做?

编辑:拦截器列表也是累积的,所以我的 NullInterceptorSelector 实际上不起作用。

最佳答案

简单的解决方案显然是不使用拦截器连接设施......但如果由于某种原因这不可能,您可以像您自己建议的那样使用 InterceptorSelector。

IInterceptorSelector 类的目的是提供一个扩展点,允许代理在每个方法的基础上选择特定的拦截器。

您的注册将如下所示:

container.Register(Component.For<IInterface>()
.ImplementedBy<Component>()
.Interceptors(InterceptorReference.ForType<LoggingInterceptor>()).SelectedWith(new ExampleInterceptionSelector()).Anywhere);

ExampleInterceptionSelector 的准系统实现如下所示:

public class ExampleInterceptionSelector : IInterceptorSelector
{
public IInterceptor[] SelectInterceptors(Type type, MethodInfo method, IInterceptor[] interceptors)
{
return new IInterceptor[];
}
}

但更好的解决方案是不将拦截器连接到不需要它们的组件。

关于c# - 如何在单个类上禁用默认的 CaSTLe 拦截器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15768095/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com