public void Create_GetsServicesFromServiceProvider()
        {
            // Arrange
            var controller      = new DIController();
            var serviceProvider = new Mock <IServiceProvider>(MockBehavior.Strict);

            serviceProvider.Setup(s => s.GetService(typeof(DIController)))
            .Returns(controller)
            .Verifiable();
            var httpContext = new DefaultHttpContext
            {
                RequestServices = serviceProvider.Object
            };
            var activator     = new ServiceBasedControllerActivator();
            var actionContext = new ActionContext(httpContext,
                                                  new RouteData(),
                                                  new ActionDescriptor());

            // Act
            var instance = activator.Create(actionContext, typeof(DIController));

            // Assert
            Assert.Same(controller, instance);
            serviceProvider.Verify();
        }
        public void Create_ThrowsIfControllerIsNotRegisteredInServiceProvider()
        {
            // Arrange
            var expected = "No service for type '" + typeof(DIController) + "' has been registered.";
            var controller = new DIController();
            var serviceProvider = new Mock<IServiceProvider>();
            var httpContext = new DefaultHttpContext
            {
                RequestServices = serviceProvider.Object
            };
            var activator = new ServiceBasedControllerActivator();
            var actionContext = new ActionContext(httpContext,
                                                  new RouteData(),
                                                  new ActionDescriptor());

            // Act and Assert
            var ex = Assert.Throws<InvalidOperationException>(
                        () => activator.Create(actionContext, typeof(DIController)));
            Assert.Equal(expected, ex.Message);
        }
        public void Create_ThrowsIfControllerIsNotRegisteredInServiceProvider()
        {
            // Arrange
            var expected        = "No service for type '" + typeof(DIController) + "' has been registered.";
            var controller      = new DIController();
            var serviceProvider = new Mock <IServiceProvider>();
            var httpContext     = new DefaultHttpContext
            {
                RequestServices = serviceProvider.Object
            };
            var activator     = new ServiceBasedControllerActivator();
            var actionContext = new ActionContext(httpContext,
                                                  new RouteData(),
                                                  new ActionDescriptor());

            // Act and Assert
            var ex = Assert.Throws <InvalidOperationException>(
                () => activator.Create(actionContext, typeof(DIController)));

            Assert.Equal(expected, ex.Message);
        }
        public void Create_GetsServicesFromServiceProvider()
        {
            // Arrange
            var controller = new DIController();
            var serviceProvider = new Mock<IServiceProvider>(MockBehavior.Strict);
            serviceProvider.Setup(s => s.GetService(typeof(DIController)))
                           .Returns(controller)
                           .Verifiable();
            var httpContext = new DefaultHttpContext
            {
                RequestServices = serviceProvider.Object
            };
            var activator = new ServiceBasedControllerActivator();
            var actionContext = new ActionContext(httpContext,
                                                  new RouteData(),
                                                  new ActionDescriptor());

            // Act
            var instance = activator.Create(actionContext, typeof(DIController));

            // Assert
            Assert.Same(controller, instance);
            serviceProvider.Verify();
        }