gpt4 book ai didi

c# - 使用 autofac 和 dynamicproxy2 选择性拦截方法

转载 作者:太空宇宙 更新时间:2023-11-03 14:30:49 25 4
gpt4 key购买 nike

我目前正在使用 Autofac-1.4.5.676、autofac contrib 和 caSTLe DynamicProxy2 进行一些试验。目标是创建一个粗粒度的分析器,可以拦截对特定接口(interface)的特定方法的调用。

问题:除了选择性部分之外,我的所有内容都运行良好。我可能是错的,但我认为我需要将我的拦截器与 IProxyGenerationHook 实现结合起来,但我不知道该怎么做。

我的代码看起来像这样:

要拦截&分析的接口(interface)(注意我只关心分析Update()方法)

public interface ISomeSystemToMonitor
{
void Update(); // this is the one I want to profile
void SomeOtherMethodWeDontCareAboutProfiling();
}

现在,当我向容器注册我的系统时,我执行以下操作:

// Register interceptor gubbins
builder.RegisterModule(new FlexibleInterceptionModule());
builder.Register<PerformanceInterceptor>();

// Register systems (just one in this example)
builder.Register<AudioSystem>()
.As<ISomeSystemToMonitor>)
.InterceptedBy(typeof(PerformanceInterceptor));

所有从容器中取出的 ISomeSystemToMonitor 实例都会根据需要进行拦截和分析,除了它会拦截其所有方法,而不仅仅是 Update 方法。

现在,我如何扩展它以排除除 Update() 之外的所有方法?正如我所说,我不明白我是如何通知容器“对于 ProfileInterceptor,使用 IProxyHookGenerator 的这个实现”。

感谢所有帮助,干杯!另外,请注意我现在无法升级到 autofac2.x;我坚持使用 1。

最佳答案

IProxyGenerationHook 实例必须在生成拦截器时传递给 CreateInterfaceProxyWithTarget 调用。参见 this tutorial了解更多详情。

目前似乎没有一种方法可以在不更改 Autofac.DynamicProxy2 集成模块的情况下提供此类 Hook 。可能是对 InterceptedBy 扩展的一个很好的补充。

或者,您可以将过滤构建到 PerformanceInterceptor 中。查看您在调用时传递的 IInvocation,检查 Method 属性以决定是否分析。但这当然比绕过代理级别的拦截效率低。

关于c# - 使用 autofac 和 dynamicproxy2 选择性拦截方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2662981/

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