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); }
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); }