public void TestSimpleSupplyBinding()
        {
            binder.Bind <ClassToBeInjected> ().To <ClassToBeInjected> ();
            binder.Bind <ClassToBeInjected> ().To <ExtendsClassToBeInjected> ().ToName(1)
            .SupplyTo <ConstructorInjectsClassToBeInjected>();

            binder.Bind <InjectsClassToBeInjected> ().To <InjectsClassToBeInjected> ();
            binder.Bind <ConstructorInjectsClassToBeInjected> ().To <ConstructorInjectsClassToBeInjected> ();

            InjectsClassToBeInjected            instance1 = binder.GetInstance <InjectsClassToBeInjected> ();
            ConstructorInjectsClassToBeInjected instance2 = binder.GetInstance <ConstructorInjectsClassToBeInjected> ();

            Assert.IsInstanceOf <ClassToBeInjected> (instance1.injected);
            Assert.IsInstanceOf <ClassToBeInjected> (instance2.injected);

            Assert.IsNotInstanceOf <ExtendsClassToBeInjected> (instance1.injected);
            Assert.IsInstanceOf <ExtendsClassToBeInjected> (instance2.injected);
        }
        public void TestChainedSupplyBinding()
        {
            binder.Bind <ClassToBeInjected>().To <ExtendsClassToBeInjected>()
            .SupplyTo <HasANamedInjection> ()
            .SupplyTo <ConstructorInjectsClassToBeInjected>()
            .SupplyTo <InjectsClassToBeInjected>();

            binder.Bind <HasANamedInjection>().To <HasANamedInjection> ();
            binder.Bind <ConstructorInjectsClassToBeInjected>().To <ConstructorInjectsClassToBeInjected> ();
            binder.Bind <InjectsClassToBeInjected>().To <InjectsClassToBeInjected> ();

            HasANamedInjection instance = binder.GetInstance <HasANamedInjection> ();
            ConstructorInjectsClassToBeInjected instance2 = binder.GetInstance <ConstructorInjectsClassToBeInjected> ();
            InjectsClassToBeInjected            instance3 = binder.GetInstance <InjectsClassToBeInjected> ();

            Assert.IsInstanceOf <ClassToBeInjected> (instance.injected);
            Assert.IsInstanceOf <ClassToBeInjected> (instance2.injected);
            Assert.IsInstanceOf <ClassToBeInjected> (instance3.injected);
        }
        public void TestRuntimeSupplyBindingWithArray()
        {
            string jsonString = "[{\"Bind\":\"strange.unittests.ClassToBeInjected\",\"To\":\"strange.unittests.ExtendsClassToBeInjected\",";

            jsonString += "\"Options\": [\"ToSingleton\",{\"SupplyTo\": [\"strange.unittests.HasANamedInjection\",\"strange.unittests.ConstructorInjectsClassToBeInjected\",\"strange.unittests.InjectsClassToBeInjected\"]}]},";
            jsonString += "{\"Bind\":\"strange.unittests.HasANamedInjection\",\"To\":\"strange.unittests.HasANamedInjection\"},";
            jsonString += "{\"Bind\":\"strange.unittests.ConstructorInjectsClassToBeInjected\",\"To\":\"strange.unittests.ConstructorInjectsClassToBeInjected\"},";
            jsonString += "{\"Bind\":\"strange.unittests.InjectsClassToBeInjected\",\"To\":\"strange.unittests.InjectsClassToBeInjected\"}]";

            binder.ConsumeBindings(jsonString);

            HasANamedInjection instance = binder.GetInstance <HasANamedInjection> ();
            ConstructorInjectsClassToBeInjected instance2 = binder.GetInstance <ConstructorInjectsClassToBeInjected> ();
            InjectsClassToBeInjected            instance3 = binder.GetInstance <InjectsClassToBeInjected> ();

            Assert.IsInstanceOf <ClassToBeInjected> (instance.injected);
            Assert.IsInstanceOf <ClassToBeInjected> (instance2.injected);
            Assert.IsInstanceOf <ClassToBeInjected> (instance3.injected);
        }
        public void TestRuntimeSimpleSupplyBinding()
        {
            string jsonString = "[{\"Bind\":\"strange.unittests.ClassToBeInjected\",\"To\":\"strange.unittests.ClassToBeInjected\"},";

            jsonString += "{\"Bind\":\"strange.unittests.ClassToBeInjected\",\"To\":\"strange.unittests.ExtendsClassToBeInjected\",\"ToName\": 1,\"Options\": [{\"SupplyTo\": \"strange.unittests.ConstructorInjectsClassToBeInjected\"}]},";
            jsonString += "{\"Bind\":\"strange.unittests.InjectsClassToBeInjected\",\"To\": \"strange.unittests.InjectsClassToBeInjected\"},";
            jsonString += "{\"Bind\":\"strange.unittests.ConstructorInjectsClassToBeInjected\",\"To\": \"strange.unittests.ConstructorInjectsClassToBeInjected\"}]";

            binder.ConsumeBindings(jsonString);

            InjectsClassToBeInjected            instance1 = binder.GetInstance <InjectsClassToBeInjected> ();
            ConstructorInjectsClassToBeInjected instance2 = binder.GetInstance <ConstructorInjectsClassToBeInjected> ();

            Assert.IsInstanceOf <ClassToBeInjected> (instance1.injected);
            Assert.IsInstanceOf <ClassToBeInjected> (instance2.injected);

            Assert.IsNotInstanceOf <ExtendsClassToBeInjected> (instance1.injected);
            Assert.IsInstanceOf <ExtendsClassToBeInjected> (instance2.injected);
        }
        public void TestUnsupplyBinding()
        {
            binder.Bind <ClassToBeInjected> ().To <ExtendsClassToBeInjected> ()
            .ToName("Supplier")
            .SupplyTo <InjectsClassToBeInjected> ();

            binder.Bind <ClassToBeInjected> ().To <ClassToBeInjected> ();

            binder.Bind <InjectsClassToBeInjected>().To <InjectsClassToBeInjected> ();

            InjectsClassToBeInjected instance = binder.GetInstance <InjectsClassToBeInjected> ();

            Assert.IsInstanceOf <ClassToBeInjected> (instance.injected);
            Assert.IsInstanceOf <ExtendsClassToBeInjected> (instance.injected);

            binder.Unsupply <ClassToBeInjected, InjectsClassToBeInjected> ();

            InjectsClassToBeInjected instance2 = binder.GetInstance <InjectsClassToBeInjected> ();

            Assert.IsInstanceOf <ClassToBeInjected> (instance2.injected);
            Assert.IsNotInstanceOf <ExtendsClassToBeInjected> (instance2.injected);
        }