using System;
using System.Reflection;
using System.Runtime.Remoting.Messaging;
using System.Runtime.Remoting.Proxies;
<summary>
</summary>
<typeparam name="T"></typeparam>
public class WrappingProxy<T> : RealProxy
{
<summary>
</summary>
private readonly T _targetInstance;
<summary>
</summary>
public T TargetInstance
{
get
{
return this._targetInstance;
}
}
<summary>
<
</summary>
<param name="targetInstance"></param>
public WrappingProxy(T targetInstance)
: base(typeof(T))
{
this._targetInstance = targetInstance;
}
<summary>
</summary>
<param name="msg"></param>
<returns></returns>
public override IMessage Invoke(IMessage msg)
{
IMethodCallMessage methodCallMessage = (IMethodCallMessage)msg;
MethodBase targetMethod = methodCallMessage.MethodBase;
object[] args = methodCallMessage.Args;
ReturnMessage returnMessage;
try
{
object invokeResult = targetMethod.Invoke(this._targetInstance, args);
returnMessage = new ReturnMessage(invokeResult, args, args.Length, methodCallMessage.LogicalCallContext, methodCallMessage);
}
catch (TargetInvocationException ex)
{
returnMessage = new ReturnMessage(ex.InnerException, methodCallMessage);
}
return returnMessage;
}
<summary>
</summary>
<returns></returns>
public new T GetTransparentProxy()
{
return (T)base.GetTransparentProxy();
}
}