public void Resolve_AsSingletonWithoutImplementation_ShouldReturnTheSameInstance()
        {
            // Arrange
            var objectInfo = new ContainerInstance(typeof(ServiceStub), this.container);

            objectInfo.AsSingleton();

            // Act
            var serviceStub1 = objectInfo.Resolve();
            var serviceStub2 = objectInfo.Resolve();

            // Assert
            Assert.AreSame(serviceStub1, serviceStub2);
        }
        public void Resolve_SetFactoryWithArgumentsAsSingleton_ShouldCreateNewInstanceEachTime()
        {
            // Arrange
            var objectInfo = new ContainerInstance(this.registeredType, this.container);

            objectInfo.AsSingleton((arguments) => new ServiceStub());

            // Act
            var serviceStub1 = objectInfo.Resolve();
            var serviceStub2 = objectInfo.Resolve();

            // Assert
            Assert.AreSame(serviceStub1, serviceStub2);
        }
        public void Resolve_SetTypeImplementationAsSingletonWithGenericMethod_ShouldCreateTheSameInstance()
        {
            // Arrange
            var objectInfo = new ContainerInstance(this.registeredType, this.container);

            objectInfo.AsSingleton <ServiceStub>();

            // Act
            var serviceStub1 = objectInfo.Resolve();
            var serviceStub2 = objectInfo.Resolve();

            // Assert
            Assert.AreSame(serviceStub1, serviceStub2);
        }
        public void Resolve_SetTypeImplementation_ShouldCreateNewInstanceEachTime()
        {
            // Arrange
            var objectInfo = new ContainerInstance(this.registeredType, this.container);

            objectInfo.As(typeof(ServiceStub));

            // Act
            var serviceStub1 = objectInfo.Resolve();
            var serviceStub2 = objectInfo.Resolve();

            // Assert
            Assert.AreNotSame(serviceStub1, serviceStub2);
        }
        public void Resolve_TypeDoesntHaveSpecifiedConstructor_ThrowsException()
        {
            // Arrange
            var objectInfo = new ContainerInstance(typeof(ServiceWithoutInjectAttributeStub), this.container);

            // Act
            TestDelegate action = () => objectInfo.Resolve();

            // Assert
            Assert.Throws <NotSupportedException>(action, string.Format(CultureInfo.CurrentCulture, InversionOfControlResources.ErrMsg_CannotFindConstructorForType, typeof(ServiceWithoutInjectAttributeStub)));
        }
        public void Resolve_SetTypeImplementationAsSingletonWithGenericMethod_ShouldCreateNewInstance()
        {
            // Arrange
            var objectInfo = new ContainerInstance(this.registeredType, this.container);

            objectInfo.AsSingleton <ServiceStub>();

            // Act
            var serviceStub = objectInfo.Resolve();

            // Assert
            Assert.IsInstanceOf(typeof(ServiceStub), serviceStub);
        }
        public void Resolve_SetInstanceAsSingleton_ShouldReturnTheSameInstance()
        {
            // Arrange
            var objectInfo = new ContainerInstance(this.registeredType, this.container);
            var instance   = new ServiceStub();

            objectInfo.AsSingleton(instance);

            // Act
            var serviceStub1 = objectInfo.Resolve();

            // Assert
            Assert.AreSame(instance, serviceStub1);
        }
        public void Resolve_SetFactoryWithArgumentsAsSingleton_ShouldCreateNewInstance()
        {
            // Arrange
            var objectInfo  = new ContainerInstance(this.registeredType, this.container);
            var serviceStub = new ServiceStub();

            objectInfo.AsSingleton((arguments) => serviceStub);

            // Act
            var result = objectInfo.Resolve();

            // Assert
            Assert.AreEqual(serviceStub, result);
        }
        public void Resolve_WithArguments_ShouldUseArguments()
        {
            // Arrange
            var          objectInfo = new ContainerInstance(this.registeredType, this.container);
            const string A          = "Test";
            const int    B          = 10;

            objectInfo.As(typeof(ServiceWithConstructorStub));

            // Act
            var result = (ServiceWithConstructorStub)objectInfo.Resolve(new object[] { A, B });

            // Assert
            Assert.AreEqual(A, result.A);
            Assert.AreEqual(B, result.B);
        }
        public void Resolve_TypeWithPrivateMethodInjection_ShouldInjectMethod()
        {
            // Arrange
            var serviceStub1 = new ServiceStub();

            this.registrationContext.Register <IServiceStub1>().AsSingleton(serviceStub1);

            var objectInfo = new ContainerInstance(typeof(ServiceWithPrivateMethodInjection), this.container);

            objectInfo.As(typeof(ServiceWithPrivateMethodInjection));

            // Act
            var result = (ServiceWithPrivateMethodInjection)objectInfo.Resolve();

            // Assert
            Assert.AreEqual(serviceStub1, result.Child);
        }
        public void Resolve_ResolveTypeWithDependency_ShouldAskContainerToResolveArgumentsForCtor()
        {
            // Arrange
            var serviceStub = new ServiceStub();

            this.registrationContext.Register <IServiceStub1>().AsSingleton(serviceStub);

            var objectInfo = new ContainerInstance(typeof(ServiceWithDependencyStub), this.container);

            objectInfo.As(typeof(ServiceWithDependencyStub));

            // Act
            var result = (ServiceWithDependencyStub)objectInfo.Resolve();

            // Assert
            Assert.AreEqual(serviceStub, result.Child);
        }
        public void InjectionRule_TwoTypesRegistered_ResolvedWithTypeFromRule()
        {
            // Arrange
            var serviceStub1 = new ServiceStub();
            var serviceStub2 = new ServiceStub();

            this.registrationContext.Register <IServiceStub1>().AsSingleton(serviceStub1);
            this.registrationContext.Register <IServiceStub2>().AsSingleton(serviceStub2);

            var objectInfo = new ContainerInstance(typeof(ServiceWithStubBaseInjection), this.container);

            objectInfo.As(typeof(ServiceWithStubBaseInjection));

            // Act
            objectInfo.InjectionRule(typeof(IServiceStubBase), typeof(IServiceStub2));
            var stub = (ServiceWithStubBaseInjection)objectInfo.Resolve();

            // Assert
            Assert.AreEqual(serviceStub2, stub.Child);
        }
예제 #13
0
        public void Resolve_TypeDoesntHaveSpecifiedConstructor_ThrowsException()
        {
            // Arrange
            var objectInfo = new ContainerInstance(typeof(ServiceWithoutInjectAttributeStub), this.container);

            // Act
            TestDelegate action = () => objectInfo.Resolve();

            // Assert
            Assert.Throws<NotSupportedException>(action, string.Format(CultureInfo.CurrentCulture, InversionOfControlResources.ErrMsg_CannotFindConstructorForType, typeof(ServiceWithoutInjectAttributeStub)));
        }
예제 #14
0
        public void Resolve_SetTypeImplementation_ShouldCreateNewInstance()
        {
            // Arrange
            var objectInfo = new ContainerInstance(this.registeredType, this.container);
            objectInfo.As(typeof(ServiceStub));

            // Act
            var serviceStub = objectInfo.Resolve();

            // Assert
            Assert.IsInstanceOf(typeof(ServiceStub), serviceStub);
        }
예제 #15
0
        public void Resolve_SetTypeImplementation_ShouldCreateNewInstanceEachTime()
        {
            // Arrange
            var objectInfo = new ContainerInstance(this.registeredType, this.container);
            objectInfo.As(typeof(ServiceStub));

            // Act
            var serviceStub1 = objectInfo.Resolve();
            var serviceStub2 = objectInfo.Resolve();

            // Assert
            Assert.AreNotSame(serviceStub1, serviceStub2);
        }
예제 #16
0
        public void Resolve_SetInstanceAsSingleton_ShouldReturnTheSameInstance()
        {
            // Arrange
            var objectInfo = new ContainerInstance(this.registeredType, this.container);
            var instance = new ServiceStub();
            objectInfo.AsSingleton(instance);

            // Act
            var serviceStub1 = objectInfo.Resolve();

            // Assert
            Assert.AreSame(instance, serviceStub1);
        }
예제 #17
0
        public void Resolve_SetTypeImplementationAsSingletonWithGenericMethod_ShouldCreateTheSameInstance()
        {
            // Arrange
            var objectInfo = new ContainerInstance(this.registeredType, this.container);
            objectInfo.AsSingleton<ServiceStub>();

            // Act
            var serviceStub1 = objectInfo.Resolve();
            var serviceStub2 = objectInfo.Resolve();

            // Assert
            Assert.AreSame(serviceStub1, serviceStub2);
        }
예제 #18
0
        public void Resolve_SetFactory_ShouldCreateNewInstanceEachTime()
        {
            // Arrange
            var objectInfo = new ContainerInstance(this.registeredType, this.container);
            objectInfo.As(() => new ServiceStub());

            // Act
            var serviceStub1 = objectInfo.Resolve();
            var serviceStub2 = objectInfo.Resolve();

            // Assert
            Assert.AreNotSame(serviceStub1, serviceStub2);
        }
예제 #19
0
        public void Resolve_SetFactory_ShouldCreateNewInstance()
        {
            // Arrange
            var objectInfo = new ContainerInstance(this.registeredType, this.container);
            var serviceStub = new ServiceStub();
            objectInfo.As(() => serviceStub);

            // Act
            var result = objectInfo.Resolve();

            // Assert
            Assert.AreEqual(serviceStub, result);
        }
예제 #20
0
        public void Resolve_ResolveTypeWithDependency_ShouldAskContainerToResolveArgumentsForCtor()
        {
            // Arrange
            var serviceStub = new ServiceStub();
            this.registrationContext.Register<IServiceStub1>().AsSingleton(serviceStub);

            var objectInfo = new ContainerInstance(typeof(ServiceWithDependencyStub), this.container);
            objectInfo.As(typeof(ServiceWithDependencyStub));

            // Act
            var result = (ServiceWithDependencyStub)objectInfo.Resolve();

            // Assert
            Assert.AreEqual(serviceStub, result.Child);
        }
예제 #21
0
        public void Resolve_AsSingletonWithoutImplementation_ShouldReturnTheSameInstance()
        {
            // Arrange
            var objectInfo = new ContainerInstance(typeof(ServiceStub), this.container);
            objectInfo.AsSingleton();

            // Act
            var serviceStub1 = objectInfo.Resolve();
            var serviceStub2 = objectInfo.Resolve();

            // Assert
            Assert.AreSame(serviceStub1, serviceStub2);
        }
예제 #22
0
        public void Resolve_TypeWithPrivateMethodInjection_ShouldInjectMethod()
        {
            // Arrange
            var serviceStub1 = new ServiceStub();
            this.registrationContext.Register<IServiceStub1>().AsSingleton(serviceStub1);

            var objectInfo = new ContainerInstance(typeof(ServiceWithPrivateMethodInjection), this.container);
            objectInfo.As(typeof(ServiceWithPrivateMethodInjection));

            // Act
            var result = (ServiceWithPrivateMethodInjection)objectInfo.Resolve();

            // Assert
            Assert.AreEqual(serviceStub1, result.Child);
        }
예제 #23
0
        public void Resolve_WithArguments_ShouldUseArguments()
        {
            // Arrange
            var objectInfo = new ContainerInstance(this.registeredType, this.container);
            const string A = "Test";
            const int B = 10;
            objectInfo.As(typeof(ServiceWithConstructorStub));

            // Act
            var result = (ServiceWithConstructorStub)objectInfo.Resolve(new object[] { A, B });

            // Assert
            Assert.AreEqual(A, result.A);
            Assert.AreEqual(B, result.B);
        }
예제 #24
0
        public void InjectionRule_TwoTypesRegistered_ResolvedWithTypeFromRule()
        {
            // Arrange
            var serviceStub1 = new ServiceStub();
            var serviceStub2 = new ServiceStub();
            this.registrationContext.Register<IServiceStub1>().AsSingleton(serviceStub1);
            this.registrationContext.Register<IServiceStub2>().AsSingleton(serviceStub2);

            var objectInfo = new ContainerInstance(typeof(ServiceWithStubBaseInjection), this.container);
            objectInfo.As(typeof(ServiceWithStubBaseInjection));

            // Act
            objectInfo.InjectionRule(typeof(IServiceStubBase), typeof(IServiceStub2));
            var stub = (ServiceWithStubBaseInjection)objectInfo.Resolve();

            // Assert
            Assert.AreEqual(serviceStub2, stub.Child);
        }