public MethodInformation ResolveMethodInformation(MethodSignature signature) { MethodInformation returned; @lock.AcquireReaderLock(-1); if (methods.ContainsKey(signature.Type)) { if (methods[signature.Type].ContainsKey(signature)) { returned = methods[signature.Type][signature]; @lock.ReleaseLock(); return(returned); } } @lock.UpgradeToWriterLock(-1); if (!methods.ContainsKey(signature.Type)) { methods[signature.Type] = new Dictionary <MethodSignature, MethodInformation>(); } var method = signature.Type.GetMethod( signature.Name, BindingFlags.Public | BindingFlags.Instance, null, signature.Types, new ParameterModifier[0]); if (method == null) { @lock.ReleaseLock(); throw new MissingMethodException( String.Format("Missing method: '{0}' on '{1}'", signature.Name, signature.Type.FullName)); } returned = new MethodInformation(method, GetParameters(method), method.GetCustomAttributes(true)); methods[signature.Type][signature] = returned; @lock.ReleaseLock(); return(returned); }
public MethodInformation ResolveMethodInformation(MethodSignature signature) { MethodInformation returned; @lock.AcquireReaderLock(-1); if (methods.ContainsKey(signature.Type)) if (methods[signature.Type].ContainsKey(signature)) { returned = methods[signature.Type][signature]; @lock.ReleaseLock(); return returned; } @lock.UpgradeToWriterLock(-1); if (!methods.ContainsKey(signature.Type)) methods[signature.Type] = new Dictionary<MethodSignature, MethodInformation>(); var method = signature.Type.GetMethod( signature.Name, BindingFlags.Public | BindingFlags.Instance, null, signature.Types, new ParameterModifier[0]); if (method == null) { @lock.ReleaseLock(); throw new MissingMethodException( String.Format("Missing method: '{0}' on '{1}'", signature.Name, signature.Type.FullName)); } returned = new MethodInformation(method, GetParameters(method), method.GetCustomAttributes(true)); methods[signature.Type][signature] = returned; @lock.ReleaseLock(); return returned; }