public void TestUnregisterInstanceWithKey()
        {
            var instanceOriginal1 = new TestClass();
            var instanceOriginal2 = new TestClass();
            const string key1 = "My key 1";
            const string key2 = "My key 2";

            SimpleIoc.Default.Reset();
            SimpleIoc.Default.Register(() => instanceOriginal1, key1);
            SimpleIoc.Default.Register(() => instanceOriginal2, key2);

            var instance1 = SimpleIoc.Default.GetInstance<TestClass>(key1);
            Assert.AreSame(instanceOriginal1, instance1);
            var instance2 = SimpleIoc.Default.GetInstance<TestClass>(key2);
            Assert.AreSame(instanceOriginal2, instance2);

            SimpleIoc.Default.Unregister<TestClass>(key1);

            try
            {
                SimpleIoc.Default.GetInstance<TestClass>(key1);
                Assert.Fail("ActivationException was expected");
            }
            catch (ActivationException)
            {
            }
        }
        public void TestContainsInstance()
        {
            SimpleIoc.Default.Reset();
            const string key1 = "My key";
            var instance = new TestClass();
            SimpleIoc.Default.Register(() => instance, key1);
            SimpleIoc.Default.Register<TestClass2>();

            Assert.IsFalse(SimpleIoc.Default.ContainsCreated<TestClass>());
            Assert.IsFalse(SimpleIoc.Default.ContainsCreated<TestClass>(key1));
            Assert.IsFalse(SimpleIoc.Default.ContainsCreated<TestClass2>());
            Assert.IsFalse(SimpleIoc.Default.ContainsCreated<TestClass3>());

            SimpleIoc.Default.GetInstance<TestClass>(key1);

            Assert.IsTrue(SimpleIoc.Default.ContainsCreated<TestClass>());
            Assert.IsTrue(SimpleIoc.Default.ContainsCreated<TestClass>(key1));
            Assert.IsFalse(SimpleIoc.Default.ContainsCreated<TestClass2>());
            Assert.IsFalse(SimpleIoc.Default.ContainsCreated<TestClass3>());

            SimpleIoc.Default.GetInstance<TestClass2>();

            Assert.IsTrue(SimpleIoc.Default.ContainsCreated<TestClass>());
            Assert.IsTrue(SimpleIoc.Default.ContainsCreated<TestClass>(key1));
            Assert.IsTrue(SimpleIoc.Default.ContainsCreated<TestClass2>());
            Assert.IsFalse(SimpleIoc.Default.ContainsCreated<TestClass3>());
        }
        public void TestIsClassRegisteredWithFactory()
        {
            SimpleIoc.Default.Reset();

            var instance = new TestClass();
            Assert.IsFalse(SimpleIoc.Default.IsRegistered<TestClass>());
            SimpleIoc.Default.Register(() => instance);
            Assert.IsTrue(SimpleIoc.Default.IsRegistered<TestClass>());

            SimpleIoc.Default.GetInstance<TestClass>();
            Assert.IsTrue(SimpleIoc.Default.IsRegistered<TestClass>());

            SimpleIoc.Default.Unregister<TestClass>();
            Assert.IsFalse(SimpleIoc.Default.IsRegistered<TestClass>());
        }
        public void TestUnregisterInstance()
        {
            var instanceOriginal1 = new TestClass();

            SimpleIoc.Default.Reset();
            SimpleIoc.Default.Register(() => instanceOriginal1);

            var instance1 = SimpleIoc.Default.GetInstance<TestClass>();
            Assert.AreSame(instanceOriginal1, instance1);

            SimpleIoc.Default.Unregister(instanceOriginal1);

            try
            {
                SimpleIoc.Default.GetInstance<TestClass>();
                Assert.Fail("ActivationException was expected");
            }
            catch (ActivationException)
            {
            }
        }
        public void TestIsClassRegisteredWithFactoryAndKey()
        {
            SimpleIoc.Default.Reset();
            const string key1 = "My key 1";
            const string key2 = "My key 2";

            var instance = new TestClass();
            Assert.IsFalse(SimpleIoc.Default.IsRegistered<TestClass>(key1));
            Assert.IsFalse(SimpleIoc.Default.IsRegistered<TestClass>(key2));

            SimpleIoc.Default.Register(() => instance, key1);
            Assert.IsTrue(SimpleIoc.Default.IsRegistered<TestClass>(key1));
            Assert.IsFalse(SimpleIoc.Default.IsRegistered<TestClass>(key2));

            SimpleIoc.Default.GetInstance<TestClass>(key1);
            Assert.IsTrue(SimpleIoc.Default.IsRegistered<TestClass>(key1));

            SimpleIoc.Default.Unregister<TestClass>(key1);
            Assert.IsFalse(SimpleIoc.Default.IsRegistered<TestClass>(key1));
            Assert.IsFalse(SimpleIoc.Default.IsRegistered<TestClass>(key2));
        }