ProxyUtil
Helper support for proxy configuration.
using Castle.Core;
using Castle.DynamicProxy;
using System;
using System.Runtime.Remoting;
namespace Castle.MicroKernel.Proxy
{
public abstract class ProxyUtil
{
public static ProxyOptions ObtainProxyOptions(ComponentModel model, bool createOnDemand)
{
ProxyOptions proxyOptions = model.ExtendedProperties[ProxyConstants.ProxyOptionsKey] as ProxyOptions;
if (proxyOptions == null && createOnDemand) {
proxyOptions = new ProxyOptions(model.Dependencies);
model.ExtendedProperties[ProxyConstants.ProxyOptionsKey] = proxyOptions;
}
return proxyOptions;
}
public static object GetUnproxiedInstance(object instance)
{
if (!RemotingServices.IsTransparentProxy(instance)) {
IProxyTargetAccessor val = instance as IProxyTargetAccessor;
if (val != null)
instance = val.DynProxyGetTarget();
}
return instance;
}
public static Type GetUnproxiedType(object instance)
{
if (!RemotingServices.IsTransparentProxy(instance)) {
IProxyTargetAccessor val = instance as IProxyTargetAccessor;
if (val != null) {
object obj = val.DynProxyGetTarget();
if (obj != null) {
if (object.ReferenceEquals(obj, instance))
return instance.GetType().BaseType;
instance = obj;
}
}
}
return instance.GetType();
}
}
}