csharp/1996v/Bssom.Net/Bssom.Serializer/Resolvers/CompositedResolverAllowPrivate.cs

CompositedResolverAllowPrivate.cs
//using System.Runtime.CompilerServices;

namespace Bssom.Serializer.Resolvers
{
    /// 
    /// Composited resolver, Object -> Primitive -> Attribute -> BssomValue -> BuildIn -> IDictionary -> ICollection -> MapCodeGenAllowPrivate.
    /// 
    public sealed clast CompositedResolverAllowPrivate : IFormatterResolver
    {
        /// 
        /// The singleton instance that can be used.
        /// 
        public static readonly CompositedResolverAllowPrivate Instance = new CompositedResolverAllowPrivate();

        private static readonly IFormatterResolver[] Resolvers = new IFormatterResolver[] {
            ObjectResolver.Instance,
            PrimitiveResolver.Instance,
            AttributeFormatterResolver.Instance,
            BssomValueResolver.Instance,
            BuildInResolver.Instance,
            IDictionaryResolver.Instance,
            ICollectionResolver.Instance,
            MapCodeGenResolverAllowPrivate.Instance
        };

        public IBssomFormatter GetFormatter()
        {
            return FormatterCache.Formatter;
        }

        private static clast FormatterCache
        {
            public static readonly IBssomFormatter Formatter;

            static FormatterCache()
            {
                foreach (IFormatterResolver item in Resolvers)
                {
                    IBssomFormatter f = item.GetFormatter();
                    if (f != null)
                    {
                        Formatter = f;
                        return;
                    }
                }
            }
        }
    }
}