Example #1
0
            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)
 {
 }
Example #4
0
 internal OverloadInvoker(string name, Type[] genericParameters, Type[] genericMethodParameters, ExtensionToInstanceProxy parent)
     : base(name, genericParameters, genericMethodParameters, parent)
 {
 }