private static void RedirectInterfaceMethods(TypeReference interfaceType, Collection<MethodDefinition> redirectedMethods)
{
var typeResolver = TypeResolver.For (interfaceType);
var typeDef = interfaceType.Resolve ();
foreach (var method in typeDef.Methods) {
var redirectedMethod = new MethodDefinition (method.Name, MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.Final | MethodAttributes.NewSlot, typeResolver.Resolve (method.ReturnType));
redirectedMethod.ImplAttributes = MethodImplAttributes.Runtime;
foreach (var parameter in method.Parameters) {
redirectedMethod.Parameters.Add (new ParameterDefinition (parameter.Name, parameter.Attributes, typeResolver.Resolve (parameter.ParameterType)));
}
redirectedMethod.Overrides.Add (typeResolver.Resolve (method));
redirectedMethods.Add (redirectedMethod);
}
}