【发布时间】:2018-05-15 22:55:19
【问题描述】:
我想将拦截器附加到几个方法,其中一个可能会调用其他被拦截的方法,只运行第一个拦截器。我怎样才能让它工作:
class A : IWorker
{
int Method1()
{
return 2*Method2();
}
int Method2()
{
return 5;
}
}
拦截器实现
public class WorkerUsageLogger : IInterceptor
{
public void Intercept(IInvocation invocation)
{
var indent = new string('\t', tabs);
Console.WriteLine($"{indent}Calling method {invocation.Method.Name}.");
tabs++;
invocation.Proceed();
tabs--;
Console.WriteLine($"{indent}Completed method {invocation.Method.Name}");
}
}
附加拦截器
var builder = new ContainerBuilder();
builder.RegisterInstance(new WorkerUsageLogger());
builder.RegisterType<A>().As<IWorker>().EnableInterfaceInterceptors().InterceptedBy(typeof(WorkerUsageLogger));
var container = builder.Build();
IWorker worker = container.Resolve<IWorker>();
通话中
worker.Method1();
我期待:
"Calling method Method1"
"Calling method Method2"
"Completed method Method2"
"Completed method Method1"
我来了
"Calling method Method1"
"Completed method Method1"
【问题讨论】:
-
什么递归调用?我在发布的代码中没有看到任何内容
-
拦截器是如何附加到类的?你看到什么工作?你在期待什么?你试过什么? (更新问题,不要在cmets中回答。)
标签: c# .net autofac aop interceptor