public void Can_Intercept_Multiple_Members_Using_Many_Fluent_Instructions() { var ack = 0; var target = new Foo(); var proxy = new Proxy<IFoo>(); proxy.Target(target) .InterceptMethod(f => f.Go()) .OnBefore(() => Assert.Equal(0, ack)) .OnAfter(() => ack++); proxy .InterceptGetter(f => f.Name) .OnBefore(() => Assert.Equal(1, ack)) .OnAfter(() => ack++); proxy .InterceptSetter(f => f.Description) .OnBefore(() => Assert.Equal(2, ack)) .OnAfter(() => ack++); var foo = proxy.Save(); // intercepted foo.Go(); var name = foo.Name; foo.Description = string.Empty; // not intercepted foo.Return(); foo.Name = string.Empty; var desc = foo.Description; Assert.Equal(3, ack); }