public class MyService : IService { public void DoSomething() { Console.WriteLine("Doing something..."); } } public class MyInterceptor : IInterceptor { public void Intercept(IInvocation invocation) { Console.WriteLine($"Intercepting {invocation.Method.Name}..."); invocation.Proceed(); } } public static void Main() { var service = new MyService(); var generator = new ProxyGenerator(); var interceptor = new MyInterceptor(); var proxy = generator.CreateInterfaceProxyWithTarget(service, interceptor); proxy.DoSomething(); }
public class MyService : IService { public void Add(int a, int b, out int result) { result = a + b; } } public class MyInterceptor : IInterceptor { public void Intercept(IInvocation invocation) { Console.WriteLine($"Intercepting {invocation.Method.Name}..."); invocation.SetArgumentValue(0, 10); invocation.Proceed(); invocation.GetArgumentValue(2, out int result); Console.WriteLine($"Result is {result}"); } } public static void Main() { var service = new MyService(); var generator = new ProxyGenerator(); var interceptor = new MyInterceptor(); var proxy = generator.CreateInterfaceProxyWithTargetBoth examples use the Castle.Core package library.(service, interceptor); proxy.Add(1, 2, out int result); }