示例#1
0
        static IAttributesProvider GetExternalAndFluentAPIAttrbutesCore(Type componentType)
        {
            IEnumerable <IAttributesProvider> result = new IAttributesProvider[0];

            foreach (var type in GetHierarchy(componentType))
            {
                IEnumerable <Type> metadataClassType = DataAnnotationsAttributeHelper.GetMetadataClassType(type)
                                                       .Return(x => new[] { x }, () => Enumerable.Empty <Type>());
                IEnumerable <Type> externalMetadataClassTypes = GetMetadataTypes(MetadataLocator.Default, type);
                result = result.Concat(metadataClassType.Concat(externalMetadataClassTypes).GetProviders(type));
                GetFluentAPIAttributesFromStaticMethod(type, type).Do(x => result = result.Concat(new[] { x }));
            }
            return(CompositeMetadataAttributesProvider.Create(result));
        }
        static IAttributesProvider GetExternalAndFluentAPIAttributesCore(Type componentType, bool forFiltering)
        {
            IEnumerable <Type> hierarchy             = componentType.Yield().Flatten(x => x.BaseType.YieldIfNotNull()).Reverse();
            IEnumerable <IAttributesProvider> result = new IAttributesProvider[0];

            foreach (var type in hierarchy)
            {
                IEnumerable <Type> metadataClassType =
                    (forFiltering ? GetFilteringMetadataClassType(type) : GetMetadataClassType(type))
                    .Return(x => new[] { x }, () => Enumerable.Empty <Type>());
                IEnumerable <Type> externalMetadataClassTypes = GetMetadataTypes(MetadataLocator.Default, type);
                result = result.Concat(metadataClassType.Concat(externalMetadataClassTypes).GetProviders(type, forFiltering));
                (forFiltering
                    ? GetFluentAPIFilteringAttributesFromStaticMethod(type, type)
                    : GetFluentAPIAttributesFromStaticMethod(type, type))
                .Do(x => result = result.Concat(new[] { x }));
            }
            return(CompositeMetadataAttributesProvider.Create(result));
        }
示例#3
0
        static IAttributesProvider GetExtenalAndFluentAPIAttrbutesCore(Type componentType)
        {
            IEnumerable <IAttributesProvider> result = new IAttributesProvider[0];

            while (componentType != null)
            {
                Type metadataClassType = DataAnnotationsAttributeHelper.GetMetadataClassType(componentType);
                if (metadataClassType != null)
                {
                    result = result.Concat(GetAllMetadataAttributes(metadataClassType, componentType));
                }
                Type[] externalMetadataClassTypes = MetadataLocator.Default.With(x => x.GetMetadataTypes(GetTypeOrGenericTypeDefinition(componentType)));
                if (externalMetadataClassTypes != null)
                {
                    foreach (var externalMetadataClassType in externalMetadataClassTypes)
                    {
                        result = result.Concat(GetAllMetadataAttributes(externalMetadataClassType, componentType));
                    }
                }
                GetFluentAPIAttributesFromStaticMethod(componentType, componentType).Do(x => result = result.Concat(new[] { x }));
                componentType = componentType.BaseType;
            }
            return(new CompositeMetadataAttributesProvider(result.Where(x => x != null).ToArray()));
        }