using NUnit.Framework; using StyletIoC; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace StyletUnitTests.StyletIoC { [TestFixture] public class StyletIoCMultipleBindingTests { private interface I11 { } private interface I12 { } private class C1 : I11, I12 { } private interface I2 { } private class C2 : I2 { } [Test] public void SingletonMultipleTypeBindingIsSingleton() { var builder = new StyletIoCBuilder(); builder.Bind().And().To().InSingletonScope(); var ioc = builder.BuildContainer(); Assert.AreEqual(ioc.Get(), ioc.Get()); } [Test] public void SingletonMultipleFactoryBindingIsSingleton() { var builder = new StyletIoCBuilder(); builder.Bind().And().ToFactory(x => new C1()).InSingletonScope(); var ioc = builder.BuildContainer(); Assert.AreEqual(ioc.Get(), ioc.Get()); } [Test] public void SingletonMultipleInstanceBindingWorks() { var builder = new StyletIoCBuilder(); builder.Bind().And().ToInstance(new C1()); var ioc = builder.BuildContainer(); Assert.AreEqual(ioc.Get(), ioc.Get()); } [Test] public void RejectsMultipleUnboundGenericBindings() { var builder = new StyletIoCBuilder(); builder.Bind(typeof(I2<>)).And(typeof(C2<>)).To(typeof(C2<>)).InSingletonScope(); Assert.Throws(() => builder.BuildContainer()); } [Test] public void RejectsMultipleBindingsForTheSameType() { var builder = new StyletIoCBuilder(); builder.Bind().And().To(); Assert.Throws(() => builder.BuildContainer()); } [Test] public void AllowsMultipleBindingsWithDifferentKeys() { var builder = new StyletIoCBuilder(); builder.Bind().WithKey("foo").And().To().InSingletonScope(); var ioc = builder.BuildContainer(); Assert.AreEqual(ioc.Get(), ioc.Get("foo")); } [Test] public void FinalWithKeyAppliesToAllBindings() { var builder = new StyletIoCBuilder(); builder.Bind().And().To().WithKey("foo").InSingletonScope(); var ioc = builder.BuildContainer(); Assert.DoesNotThrow(() => ioc.Get("foo")); Assert.DoesNotThrow(() => ioc.Get("foo")); Assert.AreEqual(ioc.Get("foo"), ioc.Get("foo")); } [Test] public void WeakBindingsRemoveIfAnyOtherStrongBindingWithSameTypeAndKeyExists() { var builder = new StyletIoCBuilder(); builder.Bind().And().To().AsWeakBinding(); builder.Bind().And().To(); var ioc = builder.BuildContainer(); Assert.AreEqual(0, ioc.GetAll().Count()); Assert.AreEqual(1, ioc.GetAll().Count()); Assert.AreEqual(1, ioc.GetAll().Count()); } } }