private static void ExtractFromFields(ProviderRegistrationContext context, TypeInfo type)
        {
            foreach (FieldInfo field in type.GetFields())
            {
                if (!field.IsStatic)
                {
                    continue;
                }

                ProviderAttribute[] attrs = (ProviderAttribute[])field.GetCustomAttributes(typeof(ProviderAttribute), false);
                if (attrs.Length == 0)
                {
                    context.DefineProvider(null, field.FieldType, field, null);
                }
                else
                {
                    foreach (var pa in attrs)
                    {
                        foreach (var qn in pa.GetNames(field.DeclaringType, field.Name))
                        {
                            try {
                                context.DefineProvider(qn, pa.ProviderType, field, pa);
                            }
                            catch (Exception ex) {
                                var fullName = field.DeclaringType.FullName + "." + field.Name;
                                RuntimeWarning.InvalidProviderDeclared(fullName, ex);
                                break;
                            }
                        }
                    }
                }
            }
        }
        private void ExtractFromType(ProviderRegistrationContext context, TypeInfo type)
        {
            if (type.IsPublic)
            {
                ProviderAttribute[] attrs = (ProviderAttribute[])type.GetCustomAttributes(typeof(ProviderAttribute), false);

                if (attrs.Length > 0)
                {
                    foreach (var pa in attrs)
                    {
                        foreach (var qn in pa.GetNames(type.AsType()))
                        {
                            try {
                                context.DefineProvider(qn, pa.ProviderType, type.AsType(), pa);
                            }
                            catch (Exception ex) {
                                RuntimeWarning.InvalidProviderDeclared(type.FullName, ex);
                                break;
                            }
                        }
                    }
                }
            }
        }