Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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));
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        private IServiceCollection BuildCommonServices()
        {
            var collection = new AutoDIServiceCollection();

            collection.AddAutoDITransient <IServiceProviderFactory <IContainer> >(sp => new AutoDIServiceProviderFactory());

            foreach (var @delegate in _configureServicesDelegates)
            {
                @delegate(collection);
            }

            return(collection);
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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()));
        }
Exemplo n.º 9
0
        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));
        }
Exemplo n.º 10
0
        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());
        }
Exemplo n.º 11
0
        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));
        }
Exemplo n.º 12
0
        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);
        }
Exemplo n.º 13
0
        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)));
        }
Exemplo n.º 14
0
        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));
        }
Exemplo n.º 15
0
        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);
        }
Exemplo n.º 16
0
        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);
        }
Exemplo n.º 17
0
        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);
        }
Exemplo n.º 18
0
        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");
        }
Exemplo n.º 19
0
        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));
        }
Exemplo n.º 20
0
        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);
        }