public void Test()
        {
            var prototypeRegistry = new PrototypeRegistry <ExpensiveObjectToInitialize>();

            var stopwatch = new Stopwatch();

            stopwatch.Start();
            var expensiveObjectToInitialize = new ExpensiveObjectToInitialize(TimeSpan.FromMilliseconds(200));

            stopwatch.Stop();

            Assert.That(expensiveObjectToInitialize, Is.Not.Null);
            Assert.That(stopwatch.Elapsed, Is
                        .GreaterThan(TimeSpan.FromMilliseconds(100))
                        .And
                        .LessThan(TimeSpan.FromMilliseconds(300)));

            prototypeRegistry.Register("key", expensiveObjectToInitialize);

            stopwatch.Restart();
            var clone = prototypeRegistry.Clone("key");

            stopwatch.Stop();

            Assert.That(clone, Is.Not.Null);
            Assert.That(clone, Is.Not.SameAs(expensiveObjectToInitialize));
            Assert.That(clone.CreationTime, Is.EqualTo(expensiveObjectToInitialize.CreationTime));
            Assert.That(stopwatch.Elapsed, Is.LessThan(TimeSpan.FromMilliseconds(1)));
        }
        public void Test()
        {
            var prototypeRegistry = new PrototypeRegistry<ExpensiveObjectToInitialize>();

            var stopwatch = new Stopwatch();

            stopwatch.Start();
            var expensiveObjectToInitialize = new ExpensiveObjectToInitialize(TimeSpan.FromMilliseconds(200));
            stopwatch.Stop();

            Assert.That(expensiveObjectToInitialize, Is.Not.Null);
            Assert.That(stopwatch.Elapsed, Is
                .GreaterThan(TimeSpan.FromMilliseconds(100))
                .And
                .LessThan(TimeSpan.FromMilliseconds(300)));

            prototypeRegistry.Register("key", expensiveObjectToInitialize);

            stopwatch.Restart();
            var clone = prototypeRegistry.Clone("key");
            stopwatch.Stop();

            Assert.That(clone, Is.Not.Null);
            Assert.That(clone, Is.Not.SameAs(expensiveObjectToInitialize));
            Assert.That(clone.CreationTime, Is.EqualTo(expensiveObjectToInitialize.CreationTime));
            Assert.That(stopwatch.Elapsed, Is.LessThan(TimeSpan.FromMilliseconds(1)));
        }