查看Autofac.Extras.DynamicProxy2 上的 Autofac wiki 页面。它显示了一个CallLogger
拦截器示例,其中将 lambda 注册为拦截器:
var builder = new ContainerBuilder();
builder.RegisterType<SomeType>()
.As<ISomeInterface>()
.EnableInterfaceInterceptors();
builder.Register(c => new CallLogger(Console.Out));
var container = builder.Build();
var willBeIntercepted = container.Resolve<ISomeInterface>();
对于您的情况,只需将其切换为注册实例。
var builder = new ContainerBuilder();
builder.RegisterType<SomeType>()
.As<ISomeInterface>()
.EnableInterfaceInterceptors()
.InterceptedBy(typeof(Aspect));
var interceptor = new Aspect();
builder.RegisterInstance(interceptor);
var container = builder.Build();
var willBeIntercepted = container.Resolve<ISomeInterface>();
或者,如果您不希望输入方面,则可以使用命名拦截器。
var builder = new ContainerBuilder();
builder.RegisterType<SomeType>()
.As<ISomeInterface>()
.EnableInterfaceInterceptors()
.InterceptedBy("my-aspect-instance");
var interceptor = new Aspect();
builder.RegisterInstance(interceptor)
.Named<IInterceptor>("my-aspect-instance");
var container = builder.Build();
var willBeIntercepted = container.Resolve<ISomeInterface>();
再次查看 wiki - 有很多方法可以将拦截器与被拦截的类相关联,包括命名、类型、属性...... wiki 上有很多示例。