Extended version of DispatchProxy with Class proxying and custom states.
interfaceIExampleInterface{intMyProp{get;set;}intMyMethod(inta,intb);}usingDispatchProxyAdvanced;varproxy1=ProxyFactory.Create<IExampleInterface>((method,args)=>{Console.WriteLine($"Executing method: {method.Name}, with args: {string.Join(", ",args)}");returnargs.FirstOrDefault();});proxy1.MyProp=222;proxy1.MyMethod(20,200);// Console output: // Executing method: set_MyProp, with args: 222// Executing method: MyMethod, with args: 20, 200classExampleClass{publicvirtualintMyProp{get;set;}publicvirtualintMyMethod(inta,intb)=>a*b;}varsomeInstance=newExampleClass{MyProp=111};varproxy3=ProxyFactory.CreateSourced(someInstance,(source,method,args)=>{Console.WriteLine($"Executing method: {method.Name}, with args: {string.Join(", ",args)}");returnmethod.Invoke(source,args);});Console.WriteLine($"Property value: {proxy3.MyProp}");Console.WriteLine($"Method result: {proxy3.MyMethod(10,100)}");// Console output: // Executing method: get_MyProp, with args:// Property value: 111// Executing method: MyMethod, with args: 10, 100// Method result: 1000varproxy4=ProxyFactory.CreateSourced(someInstance,(source,proxy,method,args)=>{// set your custom state to proxy instanceproxy.CustomProxyStateDefinition="ExampleStateValue";Console.WriteLine($"Executing method: {method.Name}");returnmethod.Invoke(source,args);});Console.WriteLine($"Start proxy state: '{((IProxy)proxy4).CustomProxyStateDefinition}'");proxy4.MyMethod(10,100);Console.WriteLine($"Current proxy state: '{((IProxy)proxy4).CustomProxyStateDefinition}'");// Console output: // Start proxy state: ''// Executing method: MyMethod// Current proxy state: 'ExampleStateValue'