public void TestInject()
        {
            var injector       = new Injector();
            var testClass      = new TestClass();
            var otherTestClass = new TestClassFromInterface();

            injector.Bind <TestClass>(testClass);
            injector.Bind <ITestInterface>(otherTestClass);

            var injectingClass = new TestInjectingClass();

            injector.Inject(injectingClass);

            Assert.AreEqual(testClass, injectingClass.GetTestClass(), "instance should be injected");
            Assert.AreEqual(otherTestClass, injectingClass.GetOtherTestClass(), "instance should be injected");
        }
        public void TestPostBindings()
        {
            var injector       = new Injector();
            var testClass      = new TestClass();
            var otherTestClass = new TestClassFromInterface();

            injector.Bind <TestClass>(testClass);
            injector.Bind <ITestInterface>(otherTestClass);

            var injectingClass = new TestInjectingClass();

            injector.Bind <TestInjectingClass>(injectingClass);
            injector.PostBindings();

            Assert.AreEqual(injectingClass, injector.GetInstance <TestInjectingClass>(), "should return bound instance");

            Assert.AreEqual(testClass, injectingClass.GetTestClass(), "instance should be injected");
            Assert.AreEqual(otherTestClass, injectingClass.GetOtherTestClass(), "instance should be injected");
        }