public void can_serialize()
        {
            var widget = new ColorWidget("blue");
            var instance = new ObjectInstance(widget);
            cache.Set(typeof(Rule), instance, widget);

            var formatter = new BinaryFormatter();
            var stream = new MemoryStream();
            formatter.Serialize(stream, cache);

            stream.Position = 0;

            var deserializedCache = (LifecycleObjectCache)formatter.Deserialize(stream);
            Assert.AreNotSame(cache, deserializedCache);

            var cachedWidget = deserializedCache.Get(typeof(Rule), instance, null) as ColorWidget;
            cachedWidget.ShouldNotBeNull();
            cachedWidget.Color.ShouldEqual("blue");
        }
        public void inject_into_the_child_does_not_affect_the_parent_container()
        {
            var parent = new Container(x => x.For<IWidget>().Use<AWidget>());

            var child = parent.GetNestedContainer();
            var childWidget = new ColorWidget("blue");
            child.Inject<IWidget>(childWidget);

            // do the check repeatedly
            child.GetInstance<IWidget>().ShouldBeTheSameAs(childWidget);
            child.GetInstance<IWidget>().ShouldBeTheSameAs(childWidget);
            child.GetInstance<IWidget>().ShouldBeTheSameAs(childWidget);

            // now, compare to the parent
            parent.GetInstance<IWidget>().ShouldNotBeTheSameAs(childWidget);
        }