小编mus*_*man的帖子

Autofac + Castle DynamicProxy:拦截器的顺序

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

var builder = new ContainerBuilder();

builder.Register(c => c.Resolve<ProxyGenerator>()
    .CreateClassProxy<Foo>(
        c.Resolve<ResultProcessorInterceptor>(),
        c.Resolve<ExceptionLoggingInterceptor>()))
    .As<Foo>();
Run Code Online (Sandbox Code Playgroud)

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

那么我的问题是:这样注册后,拦截器是否能保证每次都按照相同的顺序执行?或者有没有更好的方法来确保订单每次都是我想要的?

FWIW,我查看了 IInterceptorSelector 接口。也许我遗漏了一些东西——这并非不可能——但看起来这与本例无关。但如果我错了,我很乐意得到纠正。

如果需要,我可以提供更长的代码示例。

音乐学家

aop castle-dynamicproxy autofac interceptor interception

4
推荐指数
1
解决办法
1892
查看次数