我正在使用Autofac的Castle DynamicProxy。我有一个我创建了一个代理的对象,我有两个拦截器,它在代理上行动,一个用于记录异常,第二个用于更改方法的返回值。注册码如下所示:

var builder = new ContainerBuilder();

builder.Register(c => c.Resolve<ProxyGenerator>()
    .CreateClassProxy<Foo>(
        c.Resolve<ResultProcessorInterceptor>(),
        c.Resolve<ExceptionLoggingInterceptor>()))
    .As<Foo>();
.

通过按此顺序提供参数,我发现我得到了我想要的结果,即,记录异常并处理结果。如果我反转参数的顺序,则不会发生日志记录。

我的问题,然后:以这种方式注册,拦截器是否保证每次以相同的顺序执行?或者有更好的方法来确保订单将成为我每次打算的顺序?

fwiw,我看着iInternceptorElector接口。也许我错过了一些东西 - 这不是不可能的 - 但它看起来在这种情况下没有相关。但如果我错了,我会很乐意得到纠正。

如果有必要,我可以提供更长的代码样本。

Musicologyman

有帮助吗?

解决方案

是的,拦截器将在每个截取的方法中以提供的顺序执行默认执行。

正如正确注意,如果需要,您可以使用IInterceptorSelector在每个方法基础上覆盖它。

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