/// <summary> /// Wraps the given instance in a proxy with interception hooked up if it /// is required by policy. If not required, returns the unwrapped instance. /// </summary> /// <param name="instance">object to wrap.</param> /// <param name="typeToReturn">Type of the reference to return.</param> /// <param name="policiesForThisType">Policy set specific to typeToReturn.</param> /// <returns>The object with policy added.</returns> protected override object DoWrap(object instance, Type typeToReturn, PolicySet policiesForThisType) { if (PolicyRequiresInterception(policiesForThisType)) { InterceptingRealProxy proxy = new InterceptingRealProxy(UnwrapTarget(instance), typeToReturn, policiesForThisType); return(proxy.GetTransparentProxy()); } return(instance); }
private object UnwrapTarget(object target) { if (RemotingServices.IsTransparentProxy(target)) { InterceptingRealProxy realProxy = RemotingServices.GetRealProxy(target) as InterceptingRealProxy; if (realProxy != null) { return(realProxy.Target); } } return(target); }