Example #1
0
        public void FieldInjectionFromNewInstancesOfType()
        {
            ImplWithInstanceIndex.instanceCount = 0;

            BindingBuilder bb = new BindingBuilder();

            bb.BindTypeToNewInstances(typeof(ImplWithInstanceIndex));

            Injector injector = UniInjectUtils.CreateInjector();

            injector.AddBindings(bb);

            NeedsFieldInjection needsInjection1 = injector.CreateAndInject <NeedsFieldInjection>();
            NeedsFieldInjection needsInjection2 = injector.CreateAndInject <NeedsFieldInjection>();
            NeedsFieldInjection needsInjection3 = injector.CreateAndInject <NeedsFieldInjection>();

            // Assert injection was successful
            Assert.NotNull(needsInjection1);
            Assert.NotNull(needsInjection2);
            Assert.NotNull(needsInjection3);
            // Assert that different instances were injected.
            Assert.AreEqual(1, needsInjection1.implWithInstanceCounter.instanceIndex);
            Assert.AreEqual(2, needsInjection2.implWithInstanceCounter.instanceIndex);
            Assert.AreEqual(3, needsInjection3.implWithInstanceCounter.instanceIndex);
            Assert.AreEqual(3, ImplWithInstanceIndex.instanceCount);
        }
Example #2
0
        public void FieldInjectionFromSingleInstanceOfType()
        {
            ImplWithInstanceIndex.instanceCount = 0;

            BindingBuilder bb = new BindingBuilder();

            bb.BindTypeToSingleInstance(typeof(ImplWithInstanceIndex));

            Injector injector = UniInjectUtils.CreateInjector();

            injector.AddBindings(bb);

            NeedsFieldInjection needsInjection1 = injector.CreateAndInject <NeedsFieldInjection>();
            NeedsFieldInjection needsInjection2 = injector.CreateAndInject <NeedsFieldInjection>();
            NeedsFieldInjection needsInjection3 = injector.CreateAndInject <NeedsFieldInjection>();

            // Assert injection was successful
            Assert.NotNull(needsInjection1);
            Assert.NotNull(needsInjection2);
            Assert.NotNull(needsInjection3);
            // Assert only one instance was created
            Assert.AreEqual(1, needsInjection1.implWithInstanceCounter.instanceIndex);
            Assert.AreEqual(1, needsInjection2.implWithInstanceCounter.instanceIndex);
            Assert.AreEqual(1, needsInjection3.implWithInstanceCounter.instanceIndex);
            Assert.AreEqual(1, ImplWithInstanceIndex.instanceCount);
        }
Example #3
0
        public void ConstructorInjectionWithCyclicDependenciesThrowsException()
        {
            BindingBuilder bb = new BindingBuilder();

            bb.BindTypeToNewInstances(typeof(NeedsConstructorInjectionWithCyclicDependencies_A));
            bb.BindTypeToNewInstances(typeof(NeedsConstructorInjectionWithCyclicDependencies_B));
            bb.BindTypeToNewInstances(typeof(NeedsConstructorInjectionWithCyclicDependencies_C));

            Injector injector = UniInjectUtils.CreateInjector();

            injector.AddBindings(bb);

            Assert.Throws <CyclicConstructorDependenciesException>(delegate { injector.Create <NeedsConstructorInjectionWithCyclicDependencies_A>(); });
        }
Example #4
0
        public void ConstructorInjectionWithCustomKey()
        {
            BindingBuilder bb = new BindingBuilder();

            bb.Bind("author").ToExistingInstance("Tolkien");

            Injector injector = UniInjectUtils.CreateInjector();

            injector.AddBindings(bb);

            NeedsConstructorInjectionWithCustomKey needsInjection = injector.Create <NeedsConstructorInjectionWithCustomKey>();

            Assert.AreEqual("Tolkien", needsInjection.theAuthor);
        }
Example #5
0
        public void ConstructorInjectionFromExistingInstance()
        {
            BindingBuilder bb = new BindingBuilder();

            bb.BindExistingInstance("abc");

            Injector injector = UniInjectUtils.CreateInjector();

            injector.AddBindings(bb);

            NeedsConstructorInjection needsInjection = injector.Create <NeedsConstructorInjection>();

            Assert.AreEqual("abc", needsInjection.theString);
        }
Example #6
0
        public void FieldInjectionOfInterfaceThatIsBoundToAnImplementation()
        {
            BindingBuilder bb = new BindingBuilder();

            bb.Bind(typeof(IInstanceIndexHolder)).ToSingleInstanceOfType(typeof(ImplWithInstanceIndex));

            Injector injector = UniInjectUtils.CreateInjector();

            injector.AddBindings(bb);

            NeedsFieldInjectionOfInterface needsInjection = injector.CreateAndInject <NeedsFieldInjectionOfInterface>();

            Assert.NotNull(needsInjection.interfaceInstance);
        }
Example #7
0
        public void FieldInjectionFromExistingInstance()
        {
            BindingBuilder bb = new BindingBuilder();

            bb.BindExistingInstance("abc");

            Injector injector = UniInjectUtils.CreateInjector();

            injector.AddBindings(bb);

            NeedsFieldInjection needsInjection = new NeedsFieldInjection();

            injector.Inject(needsInjection);
            Assert.AreEqual("abc", needsInjection.theString);
        }
Example #8
0
        public void ConstructorInjectionWithMultipleParameters()
        {
            BindingBuilder bb = new BindingBuilder();

            bb.BindExistingInstance("abc");
            bb.BindExistingInstance(123);

            Injector injector = UniInjectUtils.CreateInjector();

            injector.AddBindings(bb);

            NeedsConstructorInjectionWithMultipleParameters needsInjection = injector.Create <NeedsConstructorInjectionWithMultipleParameters>();

            Assert.AreEqual("abc", needsInjection.theString);
            Assert.AreEqual(123, needsInjection.theInt);
        }
Example #9
0
        public void MethodInjectionWithMultipleParameters()
        {
            BindingBuilder bb = new BindingBuilder();

            bb.BindExistingInstance("Tolkien");
            bb.BindExistingInstance(1954);
            bb.Bind(typeof(IInstanceIndexHolder)).ToExistingInstance(new ImplWithInstanceIndex());

            Injector injector = UniInjectUtils.CreateInjector();

            injector.AddBindings(bb);
            NeedsMethodInjectionWithMultipleParameters needsInjection = injector.CreateAndInject <NeedsMethodInjectionWithMultipleParameters>();

            Assert.AreEqual("Tolkien", needsInjection.theAuthor);
            Assert.AreEqual(1954, needsInjection.theYear);
            Assert.NotNull(needsInjection.theInterfaceInstance);
        }
Example #10
0
        public void ConstructorInjectionWithAcyclicDependencies()
        {
            BindingBuilder bb = new BindingBuilder();

            bb.BindTypeToNewInstances(typeof(NeedsConstructorInjectionWithAcyclicDependencies_A));
            bb.BindTypeToNewInstances(typeof(NeedsConstructorInjectionWithAcyclicDependencies_B));
            bb.BindTypeToNewInstances(typeof(NeedsConstructorInjectionWithAcyclicDependencies_C));

            Injector injector = UniInjectUtils.CreateInjector();

            injector.AddBindings(bb);

            NeedsConstructorInjectionWithAcyclicDependencies_A aInstance = injector.Create <NeedsConstructorInjectionWithAcyclicDependencies_A>();

            // The dependency in A (requires B) and B (requires C) must have been resolved with new instances.
            Assert.NotNull(aInstance.bInstance);
            Assert.NotNull(aInstance.bInstance.cInstance);
        }
Example #11
0
        public void CyclicFieldInjection()
        {
            NeedsFieldInjectionCyclic_A.instanceCount = 0;
            NeedsFieldInjectionCyclic_B.instanceCount = 0;
            NeedsFieldInjectionCyclic_C.instanceCount = 0;

            BindingBuilder bb = new BindingBuilder();

            bb.BindTypeToNewInstances(typeof(NeedsFieldInjectionCyclic_A));
            bb.BindTypeToNewInstances(typeof(NeedsFieldInjectionCyclic_B));
            bb.BindTypeToNewInstances(typeof(NeedsFieldInjectionCyclic_C));

            Injector injector = UniInjectUtils.CreateInjector();

            injector.AddBindings(bb);
            NeedsFieldInjectionCyclic_A aInstance = injector.CreateAndInject <NeedsFieldInjectionCyclic_A>();

            // The dependency in C must have been resolved with the instance of A that was created.
            Assert.NotNull(aInstance.bInstance);
            Assert.NotNull(aInstance.bInstance.cInstance);
            Assert.NotNull(aInstance.bInstance.cInstance.aInstance);
            Assert.AreEqual(aInstance.instanceIndex, aInstance.bInstance.cInstance.aInstance.instanceIndex);
        }