public void ResolveDifferentObjectYieldsDifferentObjects()
        {
            var details1 = new RegistrationDetails
            {
                RegisteredType = typeof(ISimpleInterface),
                Instructions   = new BuildDetails()
            };

            var details2 = new RegistrationDetails
            {
                RegisteredType = typeof(ILifetimeManager),
                Instructions   = new BuildDetails()
            };

            var moqBuilder = new Mock <IObjectConstructor>();

            moqBuilder.Setup(t => t.Build(details1.Instructions)).Returns(new SimpleClass());
            moqBuilder.Setup(t => t.Build(details2.Instructions)).Returns(new TransientLifetimeManager());

            ILifetimeManager manager = new SingletonLifetimeManager(moqBuilder.Object);
            var obj1 = manager.CreateType(details1);
            var obj2 = manager.CreateType(details2);

            Assert.NotEqual(obj1, obj2);
        }
        public void ResolveSameObjectTwiceYieldsSameObject()
        {
            var details1 = new RegistrationDetails
            {
                RegisteredType = typeof(ISimpleInterface),
                Instructions   = new BuildDetails()
            };

            var details2 = new RegistrationDetails
            {
                RegisteredType = typeof(ISimpleInterface),
                Instructions   = new BuildDetails()
            };

            var returnClass = new SimpleClass();

            var moqBuilder = new Mock <IObjectConstructor>();

            moqBuilder.Setup(t => t.Build(details1.Instructions)).Returns(returnClass);
            moqBuilder.Setup(t => t.Build(details2.Instructions)).Returns(returnClass);


            ILifetimeManager manager = new SingletonLifetimeManager(moqBuilder.Object);
            var obj1 = manager.CreateType(details1);
            var obj2 = manager.CreateType(details2);

            Assert.Equal(obj1, obj2);
        }
        public void RegisteredInstanceReturnsRegisteredInstance()
        {
            var details = new RegistrationDetails
            {
                RegisteredType = typeof(ISimpleInterface),
                Instructions   = new BuildDetails()
            };

            var manager        = new SingletonLifetimeManager();
            var simpleInstance = new SimpleClass();

            manager.AddInstance(details.RegisteredType, simpleInstance);
            var returnInstance = manager.CreateType(details);

            Assert.Equal(simpleInstance, returnInstance);
        }