/// <summary> /// Performs some basic screening and invokes the <see cref = "IProxyGenerationHook" /> /// to select methods. /// </summary> /// <param name = "method"></param> /// <param name = "onlyVirtuals"></param> /// <param name = "hook"></param> /// <returns></returns> protected bool AcceptMethod(IMethodInfo method, bool onlyVirtuals, IProxyGenerationHook hook) { // we can never intercept a sealed (final) method if (method.IsFinal) { Logger.DebugFormat("Excluded sealed method {0} on {1} because it cannot be intercepted.", method.Name, method.DeclaringType.FullName); return(false); } if (IsInternalAndNotVisibleToDynamicProxy(method)) { return(false); } if (onlyVirtuals && !method.IsVirtual) { if ( #if !SILVERLIGHT method.DeclaringType != typeof(MarshalByRefObject) && #endif method.IsGetType() == false && method.IsMemberwiseClone() == false) { Logger.DebugFormat("Excluded non-virtual method {0} on {1} because it cannot be intercepted.", method.Name, method.DeclaringType.FullName); hook.NonProxyableMemberNotification(type, method); } return(false); } //can only proxy methods that are public or protected (or internals that have already been checked above) if ((method.IsPublic || method.IsFamily || method.IsAssembly || method.IsFamilyOrAssembly) == false) { return(false); } #if !SILVERLIGHT if (method.DeclaringType == typeof(MarshalByRefObject)) { return(false); } #endif if (method.IsFinalizer()) { return(false); } return(hook.ShouldInterceptMethod(type, method)); }
/// <summary> /// Performs some basic screening and invokes the <see cref = "IProxyGenerationHook" /> /// to select methods. /// </summary> /// <param name = "method"></param> /// <param name = "onlyVirtuals"></param> /// <param name = "hook"></param> /// <returns></returns> protected bool AcceptMethod(IMethodInfo method, bool onlyVirtuals, IProxyGenerationHook hook) { // we can never intercept a sealed (final) method if (method.IsFinal) { Logger.DebugFormat("Excluded sealed method {0} on {1} because it cannot be intercepted.", method.Name, method.DeclaringType.FullName); return false; } if (IsInternalAndNotVisibleToDynamicProxy(method)) { return false; } if (onlyVirtuals && !method.IsVirtual) { if ( #if !SILVERLIGHT method.DeclaringType != typeof(MarshalByRefObject) && #endif method.IsGetType() == false && method.IsMemberwiseClone() == false) { Logger.DebugFormat("Excluded non-virtual method {0} on {1} because it cannot be intercepted.", method.Name, method.DeclaringType.FullName); hook.NonProxyableMemberNotification(type, method); } return false; } //can only proxy methods that are public or protected (or internals that have already been checked above) if ((method.IsPublic || method.IsFamily || method.IsAssembly || method.IsFamilyOrAssembly) == false) { return false; } #if !SILVERLIGHT if (method.DeclaringType == typeof(MarshalByRefObject)) { return false; } #endif if (method.IsFinalizer()) { return false; } return hook.ShouldInterceptMethod(type, method); }