<PackageReference Include="Castle.Core" Version="4.1.0" />

ProxyUtil

public class ProxyUtil
using Castle.DynamicProxy.Internal; using System; using System.Reflection; using System.Runtime.Remoting; namespace Castle.DynamicProxy { public class ProxyUtil { public static object GetUnproxiedInstance(object instance) { if (!RemotingServices.IsTransparentProxy(instance)) { IProxyTargetAccessor proxyTargetAccessor = instance as IProxyTargetAccessor; if (proxyTargetAccessor != null) instance = proxyTargetAccessor.DynProxyGetTarget(); } return instance; } public static Type GetUnproxiedType(object instance) { if (!RemotingServices.IsTransparentProxy(instance)) { IProxyTargetAccessor proxyTargetAccessor = instance as IProxyTargetAccessor; if (proxyTargetAccessor != null) { object obj = proxyTargetAccessor.DynProxyGetTarget(); if (obj != null) { if (obj == instance) return instance.GetType().GetTypeInfo().BaseType; instance = obj; } } } return instance.GetType(); } public static bool IsProxy(object instance) { if (RemotingServices.IsTransparentProxy(instance)) return true; return instance is IProxyTargetAccessor; } public static bool IsProxyType(Type type) { return typeof(IProxyTargetAccessor).IsAssignableFrom(type); } public static bool IsAccessible(MethodBase method) { return method.IsAccessible(); } public static bool IsAccessible(MethodBase method, out string message) { if (method.IsAccessible()) { message = null; return true; } message = CreateMessageForInaccessibleMethod(method); return false; } private static string CreateMessageForInaccessibleMethod(MethodBase inaccessibleMethod) { Assembly assembly = inaccessibleMethod.DeclaringType.GetTypeInfo().Assembly; string str = $"""{inaccessibleMethod}"""; string str2 = InternalsUtil.CreateInstructionsToMakeVisible(assembly); return str + str2; } } }