Пример #1
0
        public void UsingAutoRegistration_WhenSpecified_ShouldRegisterWithConventionAndWithRegistrationClasses()
        {
            //Arrange
            var assembly = Assembly.GetAssembly(typeof(TestSimpleInjectorRegistration));

            A.CallTo(() => registrationHelper.GetAssemblies()).Returns(new List <Assembly> {
                assembly
            });
            A.CallTo(() => registrationHelper.GetTypesImplementing <ISimpleInjectorRegistration>(assembly))
            .Returns(new List <Type> {
                typeof(TestSimpleInjectorRegistration)
            });
            A.CallTo(() => registrationHelper.GetInstancesOfTypesImplementing <ISimpleInjectorRegistration>())
            .Returns(new List <ISimpleInjectorRegistration> {
                new TestSimpleInjectorRegistration()
            });
            var containerExtension = new SimpleInjectorExtension(registrationHelper, options);

            A.CallTo(() => options.AutoRegistration).Returns(true);

            //Act
            containerExtension.Run();

            //Assert
            Assert.IsNotNull(containerExtension.Resolve <SimpleInjectorExtension>());
            Assert.IsNotNull(containerExtension.Resolve <IRegisteredByConvention>());
        }
Пример #2
0
        public void Run_WhenTheContainerInOptionsIsSet_ShouldUseTheExistingContainer()
        {
            //Arrange
            var assembly = Assembly.GetAssembly(typeof(TestSimpleInjectorRegistration));

            A.CallTo(() => registrationHelper.GetAssemblies())
            .Returns(new List <Assembly> {
                assembly
            });
            A.CallTo(() => registrationHelper.GetTypesImplementing <ISimpleInjectorRegistration>(assembly))
            .Returns(new List <Type> {
                typeof(TestSimpleInjectorRegistration)
            });
            var container          = new Container();
            var containerExtension = new SimpleInjectorExtension(registrationHelper, options)
            {
                Options = { Container = container }
            };


            //Act
            containerExtension.Run();

            //Assert
            Assert.AreSame(container, containerExtension.Container);
        }
Пример #3
0
        public void RegisterAll_WhenInvokedWithAGenericType_ShouldRegisterAllTypesThatImplementTheGenericType()
        {
            //Arrange
            var assembly = Assembly.GetAssembly(typeof(RegistrationHelper));

            A.CallTo(() => registrationHelper.GetAssemblies()).Returns(new List <Assembly> {
                assembly
            });
            A.CallTo(() => registrationHelper.GetTypesImplementing <IBootstrapperAssemblyProvider>(assembly))
            .Returns(new List <Type> {
                typeof(LoadedAssemblyProvider), typeof(ReferencedAssemblyProvider)
            });
            var container          = new Container();
            var containerExtension = new SimpleInjectorExtension(registrationHelper, options);

            containerExtension.InitializeContainer(container);

            //Act
            containerExtension.RegisterAll <IBootstrapperAssemblyProvider>();
            var result = container.GetAllInstances <IBootstrapperAssemblyProvider>().ToList();

            //Assert
            A.CallTo(() => registrationHelper.GetAssemblies()).MustHaveHappened();
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(IEnumerable <IBootstrapperAssemblyProvider>));
            Assert.IsTrue(result.Any());
            Assert.IsTrue(result.Any(c => c is LoadedAssemblyProvider));
            Assert.IsTrue(result.Any(c => c is ReferencedAssemblyProvider));
        }
Пример #4
0
        public void Run_WhenInvokedAndAutoMapperExtensionIsLoaded_ShouldRegisterMapperAsSingelton()
        {
            //Arrange
            var assembly = Assembly.GetAssembly(typeof(AutoMapperRegistration));

            A.CallTo(() => registrationHelper.GetAssemblies())
            .Returns(new List <Assembly> {
                assembly
            });
            A.CallTo(() => registrationHelper.GetTypesImplementing <IBootstrapperRegistration>(assembly))
            .Returns(new List <Type> {
                typeof(AutoMapperRegistration)
            });
            A.CallTo(() => registrationHelper.GetInstancesOfTypesImplementing <IBootstrapperRegistration>())
            .Returns(new List <IBootstrapperRegistration> {
                new AutoMapperRegistration()
            });
            var containerExtension = new SimpleInjectorExtension(registrationHelper, options);

            //Act
            containerExtension.Run();

            //Assert
            Assert.AreSame(AutoMapperExtension.ConfigurationProvider, containerExtension.Resolve <IConfigurationProvider>());
            Assert.AreSame(AutoMapperExtension.ProfileExpression, containerExtension.Resolve <IProfileExpression>());
            Assert.AreSame(AutoMapperExtension.Mapper, containerExtension.Resolve <IMapper>());
            Assert.AreSame(AutoMapperExtension.Engine, containerExtension.Resolve <IMappingEngine>());
            Assert.AreSame(containerExtension.Resolve <IConfigurationProvider>(), containerExtension.Resolve <IConfigurationProvider>());
            Assert.AreSame(containerExtension.Resolve <IProfileExpression>(), containerExtension.Resolve <IProfileExpression>());
            Assert.AreSame(containerExtension.Resolve <IMapper>(), containerExtension.Resolve <IMapper>());
            Assert.AreSame(containerExtension.Resolve <IMappingEngine>(), containerExtension.Resolve <IMappingEngine>());
        }
Пример #5
0
        public void Run_WhenInvoked_ShouldRegisterAllTypesOfIBootstrapperRegistration()
        {
            //Arrange
            var assembly = Assembly.GetAssembly(typeof(AutoMapperRegistration));

            A.CallTo(() => registrationHelper.GetAssemblies()).Returns(new List <Assembly> {
                assembly
            });
            A.CallTo(() => registrationHelper.GetTypesImplementing <IBootstrapperRegistration>(assembly))
            .Returns(new List <Type> {
                typeof(AutoMapperRegistration)
            });
            var containerExtension = new SimpleInjectorExtension(registrationHelper, options);

            //Act
            containerExtension.Run();
            var result = containerExtension.ResolveAll <IBootstrapperRegistration>();

            //Assert
            A.CallTo(() => registrationHelper.GetAssemblies()).MustHaveHappened();
            A.CallTo(() => registrationHelper.GetTypesImplementing <IBootstrapperRegistration>(assembly)).MustHaveHappened();
            Assert.IsInstanceOfType(result, typeof(IEnumerable <IBootstrapperRegistration>));
            Assert.IsTrue(result.Any());
            Assert.IsInstanceOfType(result.First(), typeof(AutoMapperRegistration));
        }
Пример #6
0
        public void Constructor_WhenInvoked_ShouldCreateASimpleInjectorExtension()
        {
            //Act
            var result = new SimpleInjectorExtension(registrationHelper, options);

            //Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(SimpleInjectorExtension));
        }
Пример #7
0
        public void Constructor_WhenInvoked_ShouldAddSimpleInjectorToTheExcludedAssemblies()
        {
            //Act
            var result = new SimpleInjectorExtension(registrationHelper, options);

            //Assert
            Assert.IsNotNull(result);
            Assert.IsTrue(Bootstrapper.Excluding.Assemblies.Contains("SimpleInjector"));
        }
Пример #8
0
        public void Constructor_WhenInvoked_ShouldInitializeContainerToNull()
        {
            //Arrange
            var extension = new SimpleInjectorExtension(registrationHelper, options);

            //Act
            var result = extension.Container;

            //Assert
            Assert.IsNull(result);
        }
Пример #9
0
        public void SetServiceLocator_WhenInvokedAndContainerIsNotInitialized_ShouldThrowException()
        {
            //Arrange
            var containerExtension = new SimpleInjectorExtension(registrationHelper, options);

            //Act
            var result = ExceptionAssert.Throws <NoContainerException>(containerExtension.SetServiceLocator);

            //Assert
            Assert.AreEqual(NoContainerException.DefaultMessage, result.Message);
        }
Пример #10
0
        public void Register_WhenInvokedWithNonGenericTargetAndContainerIsNotInitialized_ShouldThrowException()
        {
            //Arrange
            var containerExtension = new SimpleInjectorExtension(registrationHelper, options);

            //Act
            var result = ExceptionAssert.Throws <NoContainerException>(() => containerExtension.RegisterAll(typeof(IGenericTest <>)));

            //Assert
            Assert.AreEqual(NoContainerException.DefaultMessage, result.Message);
        }
Пример #11
0
        public void ResolveAll_WhenInvokedAndContainerIsNotInitialized_ShouldThrowException()
        {
            //Arrange
            var containerExtension = new SimpleInjectorExtension(registrationHelper, options);

            //Act
            var result = ExceptionAssert.Throws <NoContainerException>(() => containerExtension.ResolveAll <object>());

            //Assert
            Assert.AreEqual(NoContainerException.DefaultMessage, result.Message);
        }
Пример #12
0
        public void RegisterAll_WhenInvokedWithAGenericTypeAndContainerIsNotInitialized_ShouldThrowException()
        {
            //Arrange
            var containerExtension = new SimpleInjectorExtension(registrationHelper, options);

            //Act
            var result = ExceptionAssert.Throws <NoContainerException>(containerExtension.RegisterAll <IBootstrapperContainerExtension>);

            //Assert
            Assert.AreEqual(NoContainerException.DefaultMessage, result.Message);
        }
Пример #13
0
        public void Reset_WhenInvoked_ShouldSetTheContainerToNull()
        {
            //Arrange
            var containerExtension = new SimpleInjectorExtension(registrationHelper, options);

            containerExtension.Run();

            //Act
            containerExtension.Reset();

            //Assert
            Assert.IsNull(containerExtension.Container);
        }
Пример #14
0
        public void Run_WhenInvoked_ShouldSetTheContainerPropertyToASimpleInjectorContainer()
        {
            //Arrange
            var containerExtension = new SimpleInjectorExtension(registrationHelper, options);

            //Act
            containerExtension.Run();
            var result = containerExtension.Container;

            //Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(Container));
        }
Пример #15
0
        public void Run_WhenInvoked_ShouldInitializeContainerToAnInstanceOfSimpleInjectorContainer()
        {
            //Arrange
            var extension = new SimpleInjectorExtension(registrationHelper, options);

            //Act
            extension.Run();
            var result = extension.Container;

            //Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(Container));
        }
Пример #16
0
        public void Options_WhenInspected_ShouldReturnASimpleInjectorOptions()
        {
            //Arrange
            var containerExtension = new SimpleInjectorExtension(registrationHelper, options);

            //Act
            var result = containerExtension.Options;

            //Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(IBootstrapperContainerExtensionOptions));
            Assert.IsInstanceOfType(result, typeof(SimpleInjectorOptions));
        }
Пример #17
0
        public void ResetServiceLocator_WhenInvoked_ShouldSetTheCurrentServiceLocatorToNull()
        {
            //Arrange
            ServiceLocator.SetLocatorProvider(A.Fake <IServiceLocator>);
            var containerExtension = new SimpleInjectorExtension(registrationHelper, options);

            containerExtension.Run();

            //Act
            containerExtension.ResetServiceLocator();

            //Assert
            Assert.IsNull(ServiceLocator.Current);
        }
Пример #18
0
        public void InitializeContainer_WhenInvoked_ShouldSetTheContainerPropertyToTheContainerProvided()
        {
            //Arrange
            var containerExtension = new SimpleInjectorExtension(registrationHelper, options);
            var container          = A.Fake <Container>();

            //Act
            containerExtension.InitializeContainer(container);
            var result = containerExtension.Container;

            //Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(Container));
            Assert.AreSame(result, container);
        }
Пример #19
0
        public void Register_WhenInvokedWithGenericTargetAndImplementationType_ShouldRegisterType()
        {
            //Arrange
            var container          = new Container();
            var containerExtension = new SimpleInjectorExtension(registrationHelper, options);

            containerExtension.InitializeContainer(container);

            //Act
            containerExtension.Register <IBootstrapperAssemblyProvider, LoadedAssemblyProvider>();
            var result = container.GetInstance <IBootstrapperAssemblyProvider>();

            //Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(LoadedAssemblyProvider));
        }
Пример #20
0
        public void SetServiceLocator_WhenInvoked_ShouldSetTheSimpleInjectorContainerInServiceLocator()
        {
            //Arrange
            ServiceLocator.SetLocatorProvider(() => null);
            var containerExtension = new SimpleInjectorExtension(registrationHelper, options);

            containerExtension.Run();

            //Act
            containerExtension.SetServiceLocator();
            var result = ServiceLocator.Current;

            //Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(SimpleInjectorServiceLocatorAdapter));
        }
Пример #21
0
        public void Register_WhenInvokedWithGenericTypeAndInstance_ShouldRegisterInstance()
        {
            //Arrange
            var container          = new Container();
            var containerExtension = new SimpleInjectorExtension(registrationHelper, options);

            containerExtension.InitializeContainer(container);

            //Act
            containerExtension.Register <IBootstrapperContainerExtension>(containerExtension);
            var result = container.GetInstance <IBootstrapperContainerExtension>();

            //Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(SimpleInjectorExtension));
            Assert.AreSame(containerExtension, result);
        }
Пример #22
0
        public void Resolve_WhenInvokedWithAGenericType_ShouldResolveToASingleInstance()
        {
            //Arrange
            var containerExtension = new SimpleInjectorExtension(registrationHelper, options);
            var container          = A.Fake <Container>();
            var instance           = new object();

            container.RegisterSingleton(instance);
            containerExtension.InitializeContainer(container);

            //Act
            var result = containerExtension.Resolve <object>();

            //Assert
            Assert.IsNotNull(result);
            Assert.AreSame(instance, result);
        }
Пример #23
0
        public void ResolveAll_WhenInvokedWithAGenericType_ShouldReturnAListOfInstances()
        {
            //Arrange
            var containerExtension = new SimpleInjectorExtension(registrationHelper, options);
            var container          = new Container();
            var instances          = new IBootstrapperExtension[] { new StartupTasksExtension(A.Fake <IRegistrationHelper>()), new ServiceLocatorExtension() };

            container.RegisterCollection(instances);
            containerExtension.InitializeContainer(container);

            //Act
            var result = containerExtension.ResolveAll <IBootstrapperExtension>();

            //Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(instances.Count(), result.Count);
            Assert.IsTrue(instances.SequenceEqual(result));
        }
Пример #24
0
        public void RegisterAll_WhenInvokedWithNonGenericTargetType_ShouldRegisterType()
        {
            //Arrange
            var container          = new Container();
            var containerExtension = new SimpleInjectorExtension(registrationHelper, options);

            containerExtension.InitializeContainer(container);
            var thisAssembly = Assembly.GetAssembly(typeof(GenericTest <>));

            A.CallTo(() => registrationHelper.GetAssemblies()).Returns(new[] { thisAssembly });
            A.CallTo(() => registrationHelper.GetTypesImplementing(thisAssembly, typeof(IGenericTest <>)))
            .Returns(new[] { typeof(GenericTest <>) });

            //Act
            containerExtension.RegisterAll(typeof(IGenericTest <>));
            var result1 = container.GetInstance <IGenericTest <object> >();
            var result2 = container.GetInstance <IGenericTest <string[]> >();

            //Assert
            result1.ShouldBeOfType <GenericTest <object> >();
            result2.ShouldBeOfType <GenericTest <string[]> >();
        }
Пример #25
0
        public void Run_WhenInvoked_ShouldInvokeTheRegisterMethodOfAllISimpleInjectorRegistrationTypes()
        {
            //Arrange
            var assembly = Assembly.GetExecutingAssembly();

            A.CallTo(() => registrationHelper.GetAssemblies()).Returns(new List <Assembly> {
                assembly
            });
            A.CallTo(() => registrationHelper.GetTypesImplementing <ISimpleInjectorRegistration>(assembly))
            .Returns(new List <Type> {
                typeof(TestSimpleInjectorRegistration)
            });
            A.CallTo(() => registrationHelper.GetInstancesOfTypesImplementing <ISimpleInjectorRegistration>())
            .Returns(new List <ISimpleInjectorRegistration> {
                new TestSimpleInjectorRegistration()
            });
            var containerExtension = new SimpleInjectorExtension(registrationHelper, options);

            //Act
            containerExtension.Run();

            //Assert
            Assert.IsNotNull(containerExtension.Resolve <SimpleInjectorExtension>());
        }