internal Invoker(string name, Type[] genericParameters, Type[] genericMethodParameters, ExtensionToInstanceProxy parent, Type[] overloadTypes = null) { _name = name; _parent = parent; _genericParams = genericParameters; _genericMethodParameters = genericMethodParameters; _overloadTypes = new Dictionary <int, Type[]>(); if (overloadTypes == null) { foreach (var tGenInterface in parent.InstanceHints) { var tNewType = tGenInterface; if (tNewType.IsGenericType) { tNewType = tNewType.MakeGenericType(_genericParams); } var members = tNewType.GetMethods(BindingFlags.Instance | BindingFlags.Public).Where( it => it.Name == _name).ToList(); foreach (var tMethodInfo in members) { var tParams = tMethodInfo.GetParameters().Select(it => it.ParameterType).ToArray(); if (_overloadTypes.ContainsKey(tParams.Length)) { _overloadTypes[tParams.Length] = new Type[] {}; } else { _overloadTypes[tParams.Length] = tParams.Select(ReplaceGenericTypes).ToArray(); } } foreach (var tOverloadType in _overloadTypes.ToList()) { if (tOverloadType.Value.Length == 0) { _overloadTypes.Remove(tOverloadType); } } } } else { _overloadTypes[overloadTypes.Length] = overloadTypes; } }
internal Invoker(string name, Type[] genericParameters, Type[] genericMethodParameters, ExtensionToInstanceProxy parent, Type[] overloadTypes = null) { _name = name; _parent = parent; _genericParams = genericParameters; _genericMethodParameters = genericMethodParameters; _overloadTypes = new Dictionary<int,Type[]>(); if (overloadTypes == null) { foreach (var tGenInterface in parent.InstanceHints) { var tNewType = tGenInterface; if (tNewType.IsGenericType) { tNewType = tNewType.MakeGenericType(_genericParams); } var members = tNewType.GetMethods(BindingFlags.Instance | BindingFlags.Public).Where( it => it.Name == _name).ToList(); foreach (var tMethodInfo in members) { var tParams = tMethodInfo.GetParameters().Select(it => it.ParameterType).ToArray(); if (_overloadTypes.ContainsKey(tParams.Length)) { _overloadTypes[tParams.Length] = new Type[] {}; } else { _overloadTypes[tParams.Length] = tParams.Select(ReplaceGenericTypes).ToArray(); } } foreach (var tOverloadType in _overloadTypes.ToList()) { if (tOverloadType.Value.Length == 0) { _overloadTypes.Remove(tOverloadType); } } } } else { _overloadTypes[overloadTypes.Length] = overloadTypes; } }
internal OverloadInvoker(string name, Type[] genericParameters, Type[] genericMethodParameters, ExtensionToInstanceProxy parent) : base(name, genericParameters,genericMethodParameters, parent) { }
internal OverloadInvoker(string name, Type[] genericParameters, Type[] genericMethodParameters, ExtensionToInstanceProxy parent) : base(name, genericParameters, genericMethodParameters, parent) { }