Saturday, 23 March 2019

Autofac.Extras.DynamicProxy2 Intercept and change the values


    class Program
    {
        static void Main(string[] args)
        {
            var builder = new ContainerBuilder();

            builder.RegisterType<Calculator>()
                .As<ICalculator>().EnableInterfaceInterceptors();
            // Named registration

            builder.Register(c => new CallLogger())
                   .Named<IInterceptor>("log-calls");

            using (var container = builder.Build())
            {
                var calculator = container.Resolve<ICalculator>();
                var result = calculator.Add(1, 2);
                var vvv = calculator.Multiply(2, 3);
                Console.WriteLine("Complete, program result is {0}.", result);
                Console.ReadKey();
            }
        }
    }

    public interface ICalculator
    {
        int Add(int lhs, int rhs);
        int Multiply(int lhs, int rhs);
    }

    [Intercept("log-calls")]
    public class Calculator : ICalculator
    {
        public virtual int Add(int lhs, int rhs)
        {
            return lhs + rhs;
        }

        public virtual int Multiply(int lhs, int rhs)
        {
            return lhs * rhs;
        }
    }
          
    public class CallLogger : IInterceptor
    {
        public void Intercept(IInvocation invocation)
        {
            var vvv = string.Format("Calling method {0} with parameters {1}... ",
                invocation.Method.Name,
                string.Join(", ", invocation.Arguments.Select(a => (a ?? "").ToString()).ToArray()));

            invocation.Arguments.SetValue(5, 0);

            invocation.Proceed();
            invocation.ReturnValue = 3;
            var vvvvv = string.Format("Done: result was {0}.", invocation.ReturnValue);
        }
    }



1 comment: