Пример #1
0
        public void CanMakeValidBindings()
        {
            Context.Dispose();
            var container = new ExtraContainer1();

            container.Bind <Interface, ConcreteInterface>();
            container.Bind <AbstractClass, ConcreteAbstractClass>();
            container.Bind <BaseClass, SubClass>();
            container.Bind <Interface, ConcreteInterface>("First");
            container.Bind <AbstractClass, ConcreteAbstractClass>("Second");
            container.Bind <BaseClass, SubClass>("Third");

            int index    = 0;
            var bindings = container.GetBindings();

            Assert.AreEqual(6, bindings.Count);
            Assert.AreEqual(string.Empty, bindings[index].Item1);
            Assert.AreSame(typeof(Interface), bindings[index].Item2.TypeBoundFrom);
            Assert.AreSame(typeof(ConcreteInterface), bindings[index].Item2.TypeBoundTo);
            Assert.AreEqual("First", bindings[++index].Item1);
            Assert.AreSame(typeof(Interface), bindings[index].Item2.TypeBoundFrom);
            Assert.AreSame(typeof(ConcreteInterface), bindings[index].Item2.TypeBoundTo);
            Assert.AreEqual(string.Empty, bindings[++index].Item1);
            Assert.AreSame(typeof(AbstractClass), bindings[index].Item2.TypeBoundFrom);
            Assert.AreSame(typeof(ConcreteAbstractClass), bindings[index].Item2.TypeBoundTo);
            Assert.AreEqual("Second", bindings[++index].Item1);
            Assert.AreSame(typeof(AbstractClass), bindings[index].Item2.TypeBoundFrom);
            Assert.AreSame(typeof(ConcreteAbstractClass), bindings[index].Item2.TypeBoundTo);
            Assert.AreEqual(string.Empty, bindings[++index].Item1);
            Assert.AreSame(typeof(BaseClass), bindings[index].Item2.TypeBoundFrom);
            Assert.AreSame(typeof(SubClass), bindings[index].Item2.TypeBoundTo);
            Assert.AreEqual("Third", bindings[++index].Item1);
            Assert.AreSame(typeof(BaseClass), bindings[index].Item2.TypeBoundFrom);
            Assert.AreSame(typeof(SubClass), bindings[index].Item2.TypeBoundTo);
        }
Пример #2
0
        public void DisposeProperlyClearsContainers()
        {
            var container2 = new ExtraContainer1();

            container2.Bind <BaseClass, SubClassWithFieldDependencies>();
            container2.Bind <Interface, ConcreteInterface>("First").AsSingleton();
            container2.Bind <Interface, ConcreteInterface>();
            var abstractClass    = _container.Resolve <AbstractClass>();
            var baseClass        = container2.Resolve <BaseClass>();
            var bindings         = container2.GetBindings();
            var binding          = bindings.FirstOrDefault(t => t.Item2.TypeBoundFrom == typeof(BaseClass))?.Item2;
            var bindingInterface = bindings.FirstOrDefault(t => t.Item1 == "First")?.Item2;
            var dependencies     = binding?.GetDependencies();

            Assert.NotNull(baseClass);
            Assert.NotNull(abstractClass);
            Assert.NotNull(bindings);
            Assert.NotNull(binding);
            Assert.NotNull(bindingInterface);
            Assert.NotNull(dependencies);
            Assert.AreEqual(3, bindings.Count);
            Assert.AreEqual(2, dependencies.Count);
            Assert.IsTrue(bindingInterface.HasInstanceAvailable());
            Context.Dispose();

            Assert.Throws <Exception>(() => Context.GetContainerByType <ExtraContainer1>());
            Assert.Throws <Exception>(() => Context.GetContainerByType(typeof(ExtraContainer1)));
            Assert.Throws <Exception>(() => _container.Resolve <AbstractClass>());
            Assert.IsFalse(bindingInterface.HasInstanceAvailable());
            Assert.AreEqual(0, _container.GetBindings().Count);
        }