public void ReflectAdventureworks()
        {
            // load adventurework

            AssemblyHook.EnsureAssemblyLoaded();

            Type[]          types     = AdventureWorksTypes();
            IUnityContainer container = GetContainer();
            var             rc        = new ReflectorConfiguration(types, new Type[] {}, new Type[] {}, new Type[] {}, types.Select(t => t.Namespace).Distinct().ToArray());



            container.RegisterInstance <IReflectorConfiguration>(rc);

            var reflector = container.Resolve <IReflector>();
            var stopwatch = new Stopwatch();

            stopwatch.Start();

            reflector.Reflect();
            stopwatch.Stop();
            TimeSpan interval = stopwatch.Elapsed;

            Assert.IsTrue(reflector.AllObjectSpecImmutables.Any());
            Assert.IsTrue(interval.Milliseconds < 1000);
        }
        public void SerializeAdventureworks()
        {
            // load adventurework

            AssemblyHook.EnsureAssemblyLoaded();

            IUnityContainer container = GetContainer();
            var             rc        = new ReflectorConfiguration(Types, Services, ModelNamespaces, MainMenus);

            container.RegisterInstance <IReflectorConfiguration>(rc);

            var reflector = container.Resolve <IReflector>();

            var stopwatch = new Stopwatch();

            stopwatch.Start();

            reflector.Reflect();
            stopwatch.Stop();
            var reflectInterval = stopwatch.Elapsed.TotalMilliseconds;

            Console.WriteLine("reflect {0}", reflectInterval);

            Assert.IsTrue(reflector.AllObjectSpecImmutables.Any());

            //var cache = container.Resolve<ISpecificationCache>();

            //var f1 =
            //    cache.AllSpecifications().SelectMany(s => s.Fields)
            //        .Select(s => s.Spec)
            //        .Where(s => s != null)
            //        .OfType<OneToOneAssociationSpecImmutable>()
            //        .SelectMany(s => s.GetFacets())
            //        .Select(f => f.GetType().FullName)
            //        .Distinct();

            //foreach (var f in f1) {
            //    Console.WriteLine(" field facet  {0}", f);
            //}
            var cache = container.Resolve <ISpecificationCache>();

            serialAwSpecs = cache.AllSpecifications();

            //Directory.CreateDirectory(@"c:\testmetadata");

            //const string file = @"c:\testmetadata\metadataAW.bin";

            //SerializeDeserializeLocal(cache, file);
        }
        [Ignore] // #8225

        public void SerializeAdventureworksByType()
        {
            // load adventurework

            AssemblyHook.EnsureAssemblyLoaded();

            int count = AdventureWorksTypes().Count();

            Type[]          spec51    = AdventureWorksTypes().Skip(50).Take(1).ToArray();
            Type[]          types     = AdventureWorksTypes().Take(20).ToArray();
            IUnityContainer container = GetContainer();
            var             rc        = new ReflectorConfiguration(types, new Type[] {}, new Type[] {}, new Type[] {}, types.Select(t => t.Namespace).Distinct().ToArray());

            container.RegisterInstance <IReflectorConfiguration>(rc);

            var reflector = container.Resolve <IReflector>();

            var stopwatch = new Stopwatch();

            stopwatch.Start();

            reflector.Reflect();
            stopwatch.Stop();
            TimeSpan reflectInterval = stopwatch.Elapsed;

            stopwatch.Reset();

            Assert.IsTrue(reflector.AllObjectSpecImmutables.Any());

            var cache = container.Resolve <ISpecificationCache>();

            Directory.CreateDirectory(@"c:\testmetadata");

            const string file = @"c:\testmetadata\metadataAWT.bin";

            SerializeDeserialize(cache, file);
        }
        public void SerializeAdventureworksFacets()
        {
            // load adventurework

            AssemblyHook.EnsureAssemblyLoaded();

            int count = AdventureWorksTypes().Count();

            Type[]          types50   = AdventureWorksTypes().Take(50).ToArray();
            Type[]          types51   = AdventureWorksTypes().Take(51).ToArray();
            IUnityContainer container = GetContainer();
            var             rc        = new ReflectorConfiguration(types50, new Type[] {}, new Type[] {}, new Type[] {}, types50.Select(t => t.Namespace).Distinct().ToArray());

            container.RegisterInstance <IReflectorConfiguration>(rc);

            var reflector = container.Resolve <IReflector>();

            reflector.Reflect();

            IObjectSpecImmutable[] cache1 = container.Resolve <ISpecificationCache>().AllSpecifications();

            rc = new ReflectorConfiguration(types51, new Type[] {}, new Type[] {}, new Type[] {}, types51.Select(t => t.Namespace).Distinct().ToArray());

            container.RegisterInstance <IReflectorConfiguration>(rc);

            reflector = container.Resolve <IReflector>();

            reflector.Reflect();

            IObjectSpecImmutable[] cache2 = container.Resolve <ISpecificationCache>().AllSpecifications();

            int c1 = cache1.Count();
            int c2 = cache2.Count();

            foreach (IObjectSpecImmutable objectSpecImmutable in cache2)
            {
                if (cache1.Any(s => s.FullName == objectSpecImmutable.FullName))
                {
                    //Console.WriteLine("Found {0}", objectSpecImmutable.FullName);
                }
                else
                {
                    Console.WriteLine("Not Found object spec {0}", objectSpecImmutable.FullName);
                }
            }

            IEnumerable <IFacet> f1 = cache1.SelectMany(s => s.GetFacets()).Distinct();
            IEnumerable <IFacet> f2 = cache2.SelectMany(s => s.GetFacets()).Distinct();

            foreach (IFacet f in f2)
            {
                if (f1.Any(s => s.GetType() == f.GetType()))
                {
                    //Console.WriteLine("Found {0}", f.GetType().FullName);
                }
                else
                {
                    Console.WriteLine("Not Found object facet {0}", f.GetType().FullName);
                }
            }

            f1 =
                cache1.SelectMany(s => s.ObjectActions)
                .Where(s => s != null)
                .SelectMany(s => s.GetFacets())
                .Distinct();
            f2 =
                cache2.SelectMany(s => s.ObjectActions)
                .Where(s => s != null)
                .SelectMany(s => s.GetFacets())
                .Distinct();

            foreach (IFacet f in f2)
            {
                if (f1.Any(s => s.GetType() == f.GetType()))
                {
                    //Console.WriteLine("Found {0}", f.GetType().FullName);
                }
                else
                {
                    Console.WriteLine("Not Found action facet  {0}", f.GetType().FullName);
                }
            }

            f1 =
                cache1.SelectMany(s => s.ObjectActions)
                .Where(s => s != null)
                .SelectMany(s => s.Parameters)
                .SelectMany(s => s.GetFacets())
                .Distinct();
            f2 =
                cache2.SelectMany(s => s.ObjectActions)
                .Where(s => s != null)
                .SelectMany(s => s.Parameters)
                .SelectMany(s => s.GetFacets())
                .Distinct();

            foreach (IFacet f in f2)
            {
                if (f1.Any(s => s.GetType() == f.GetType()))
                {
                    //Console.WriteLine("Found {0}", f.GetType().FullName);
                }
                else
                {
                    Console.WriteLine("Not Found parm facet  {0}", f.GetType().FullName);
                }
            }

            f1 =
                cache1.SelectMany(s => s.Fields)
                .Where(s => s != null)
                .SelectMany(s => s.GetFacets())
                .Distinct();
            f2 =
                cache2.SelectMany(s => s.Fields)
                .Where(s => s != null)
                .SelectMany(s => s.GetFacets())
                .Distinct();

            foreach (IFacet f in f2)
            {
                if (f1.Any(s => s.GetType() == f.GetType()))
                {
                    //Console.WriteLine("Found {0}", f.GetType().FullName);
                }
                else
                {
                    Console.WriteLine("Not Found field facet  {0}", f.GetType().FullName);
                }
            }
        }