public void GetWeakSingletonOnlyCreatesOneInstanceAtATime() { var map = new ContainerMap(); var services = new AutoDIServiceCollection(); int instanceCount = 0; services.AddAutoDIWeakSingleton <IInterface, Class>(provider => { instanceCount++; return(new Class()); }); map.Add(services); var instance = map.Get <IInterface>(null); Assert.IsTrue(ReferenceEquals(instance, map.Get <IInterface>(null))); Assert.IsTrue(ReferenceEquals(instance, map.Get <IInterface>(null))); Assert.AreEqual(1, instanceCount); // ReSharper disable once RedundantAssignment instance = null; GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, true, true); Assert.IsNotNull(map.Get <IInterface>(null)); Assert.AreEqual(2, instanceCount); }
public void TestGetWeakSingleton() { var map = new ContainerMap(); var services = new AutoDIServiceCollection(); services.AddAutoDIWeakSingleton <IInterface, Class>(); map.Add(services); IInterface c = map.Get <IInterface>(null); Assert.IsTrue(c is Class); }
public void WhenMultipleRegistrationsExistItResolvesTheLastOne() { var map = new ContainerMap(); var services = new AutoDIServiceCollection(); services.AddAutoDISingleton <IInterface, Derived1>(); services.AddAutoDISingleton <IInterface, Derived2>(); map.Add(services); var @class = map.Get <IInterface>(null); Assert.IsTrue(@class is Derived2); }
public void ContainerMapCanConstructTypeWhoseDependenciesAreMapped() { var map = new ContainerMap(); var services = new AutoDIServiceCollection(); services.AddAutoDITransient <IInterface, Class>(); map.Add(services); ClassWithParameters @class = map.Get <ClassWithParameters>(null); Assert.IsInstanceOfType(@class, typeof(ClassWithParameters)); Assert.IsInstanceOfType(@class.Service, typeof(Class)); }
public void WhenConstructorHasOptionalStringParameterItResolves() { var map = new ContainerMap(); var services = new AutoDIServiceCollection(); services.AddAutoDISingleton <ClassWithOptionalStringParameter>(); map.Add(services); var @class = map.Get <ClassWithOptionalStringParameter>(null); Assert.IsNotNull(@class); Assert.IsNull(@class.Foo); }
private IServiceCollection BuildCommonServices() { var collection = new AutoDIServiceCollection(); collection.AddAutoDITransient <IServiceProviderFactory <IContainer> >(sp => new AutoDIServiceProviderFactory()); foreach (var @delegate in _configureServicesDelegates) { @delegate(collection); } return(collection); }
public void CanResolveClosedGenericFromOpenGenericRegistrationWithParameter() { var map = new ContainerMap(); var services = new AutoDIServiceCollection(); services.Add(ServiceDescriptor.Singleton(typeof(ILogger <>), typeof(LoggerEx <>))); services.Add(ServiceDescriptor.Singleton(typeof(ILoggerFactory), typeof(LoggerFactory))); map.Add(services); var logger = map.Get <ILogger <MyClass> >(null) as LoggerEx <MyClass>; Assert.IsNotNull(logger); Assert.IsTrue(logger.Factory is LoggerFactory); }
public void ContainerMapCanGenerateFuncInstances() { var map = new ContainerMap(); var @class = new Class(); var services = new AutoDIServiceCollection(); services.AddAutoDISingleton <IInterface>(@class); map.Add(services); Func <IInterface> func = map.Get <Func <IInterface> >(null); Assert.IsNotNull(func); Assert.IsTrue(ReferenceEquals(@class, func())); }
public void ContainerMapCanGenerateLazyInstances() { var map = new ContainerMap(); var @class = new Class(); var services = new AutoDIServiceCollection(); services.AddAutoDISingleton <IInterface>(@class); map.Add(services); Lazy <IInterface> lazy = map.Get <Lazy <IInterface> >(null); Assert.IsNotNull(lazy); Assert.IsTrue(ReferenceEquals(@class, lazy.Value)); }
public void CanResolveSingleIEnumerableConstructorParameter() { var map = new ContainerMap(); var services = new AutoDIServiceCollection(); services.AddAutoDISingleton <IInterface, Derived1>(); map.Add(services); var @class = map.Get <ClassWithParameter <IEnumerable <IInterface> > >(null); Assert.IsNotNull(@class); CollectionAssert.AreEquivalent( new[] { typeof(Derived1) }, @class.Parameter.Select(x => x.GetType()).ToArray()); }
public void GetLazySingletonReturnsTheSameInstance() { var map = new ContainerMap(); var services = new AutoDIServiceCollection(); services.AddAutoDIService <Class>(provider => new Class(), new[] { typeof(IInterface), typeof(IInterface2) }, Lifetime.LazySingleton); map.Add(services); var instance1 = map.Get <IInterface>(null); var instance2 = map.Get <IInterface2>(null); Assert.IsNotNull(instance1); Assert.IsNotNull(instance2); Assert.IsTrue(ReferenceEquals(instance1, instance2)); }
public void CanRemovedRegisteredMap() { var map = new ContainerMap(); var services = new AutoDIServiceCollection(); services.AddAutoDISingleton <IInterface, Derived1>(); services.AddAutoDISingleton <IInterface, Derived2>(); map.Add(services); bool wasRemoved = map.Remove <IInterface>(); var interfaces = map.Get <IEnumerable <IInterface> >(null); Assert.IsTrue(wasRemoved); Assert.IsNull(interfaces); }
public void CanResolveClosedGenericFromOpenGenericRegistration() { var map = new ContainerMap(); var services = new AutoDIServiceCollection(); services.Add(ServiceDescriptor.Singleton(typeof(ILogger <>), typeof(Logger <>))); map.Add(services); var logger1 = map.Get <ILogger <MyClass> >(null); var logger2 = map.Get <ILogger <MyOtherClass> >(null); Assert.IsNotNull(logger1); Assert.IsNotNull(logger2); Assert.IsTrue(ReferenceEquals(logger1, map.Get <ILogger <MyClass> >(null))); Assert.IsTrue(ReferenceEquals(logger2, map.Get <ILogger <MyOtherClass> >(null))); }
public void GetSingletonAlwaysReturnsTheSameInstance() { var map = new ContainerMap(); var instance = new Class(); var services = new AutoDIServiceCollection(); services.AddAutoDISingleton <IInterface>(instance); map.Add(services); IInterface c1 = map.Get <IInterface>(null); IInterface c2 = map.Get <IInterface>(null); Assert.IsTrue(ReferenceEquals(c1, c2)); Assert.IsTrue(ReferenceEquals(c1, instance)); Assert.IsTrue(ReferenceEquals(c2, instance)); }
public void TestTypeKeyNotFoundEventIsNotRaised() { var map = new ContainerMap(); var services = new AutoDIServiceCollection(); bool eventRaised = false; map.TypeKeyNotFound += (_, __) => { eventRaised = true; }; services.AddAutoDISingleton <IInterface, Class>(); map.Add(services); map.Get <IInterface>(null); Assert.IsFalse(eventRaised); }
public void TestTypeKeyNotFoundEventCanInsertType() { var map = new ContainerMap(); var services = new AutoDIServiceCollection(); var @class = new Class(); map.TypeKeyNotFound += (_, e) => { e.Instance = @class; }; map.Add(services); IInterface retrievedService = map.Get <IInterface>(null); Assert.AreEqual(@class, retrievedService); }
public void TestTypeKeyNotFoundEventIsRaised() { var map = new ContainerMap(); var services = new AutoDIServiceCollection(); bool eventRaised = false; map.TypeKeyNotFoundEvent += delegate(object sender, TypeKeyNotFoundEventArgs e) { eventRaised = true; }; services.AddAutoDISingleton <IInterface, Class>(); map.Add(services); var c = map.Get <string>(null); Assert.IsTrue(eventRaised); }
public void GetLazySingletonDoesNotCreateObjectUntilRequested() { var map = new ContainerMap(); var services = new AutoDIServiceCollection(); services.AddAutoDILazySingleton <IInterface, Class>(provider => throw new Exception()); map.Add(services); try { map.Get <IInterface>(null); } catch (Exception) { return; } Assert.Fail("Exception should have been thrown"); }
public void AutoConstructedTypesAlwaysReturnNewInstances() { var map = new ContainerMap(); var services = new AutoDIServiceCollection(); services.AddAutoDITransient <IInterface, Class>(); map.Add(services); ClassWithParameters class1 = map.Get <ClassWithParameters>(null); Assert.IsInstanceOfType(class1, typeof(ClassWithParameters)); ClassWithParameters class2 = map.Get <ClassWithParameters>(null); Assert.IsInstanceOfType(class2, typeof(ClassWithParameters)); Assert.IsFalse(ReferenceEquals(class1, class2)); }
public void GetTransientAlwaysCreatesNewInstances() { var map = new ContainerMap(); var services = new AutoDIServiceCollection(); int instanceCount = 0; services.AddAutoDITransient <IInterface, Class>(provider => { instanceCount++; return(new Class()); }); map.Add(services); var a = map.Get <IInterface>(null); var b = map.Get <IInterface>(null); var c = map.Get <IInterface>(null); Assert.IsFalse(ReferenceEquals(a, b)); Assert.IsFalse(ReferenceEquals(b, c)); Assert.IsFalse(ReferenceEquals(a, c)); Assert.AreEqual(3, instanceCount); }