像这样的东西可能对你有用:
创建城堡代理拦截器:
public class LoggingInterceptor : IInterceptor
{
private readonly IMyLogger _logger;
public LoggingInterceptor(IMyLogger logger) { _logger = logger; }
public void Intercept(IInvocation invocation)
{
_logger.Log("Before calling " + invocation.Method);
invocation.Proceed();
_logger.Log("After calling " + invocation.Method);
}
}
IFoo
在您的 SM 配置中注册它以使用代理包装所有内容:
var proxyGenerator = new ProxyGenerator();
c.For<IFoo>().Use<Foo>();
c.For<IFoo>()
.EnrichAllWith(instance =>
proxyGenerator.CreateInterfaceProxyWithTarget<IFoo>(instance,
new LoggingInterceptor(new MyLogger())));
现在,所有实例上对任何方法的所有调用都IFoo
将被LoggingInterceptor
. 您当然可以通过检查实例来过滤要记录的调用。