public void Create_ThrowsIfControllerIsNotRegisteredInServiceProvider()
        {
            // Arrange
            var expected   = "No service for type '" + typeof(DIController) + "' has been registered.";
            var controller = new DIController();

            var httpContext = new DefaultHttpContext
            {
                RequestServices = Mock.Of <IServiceProvider>()
            };

            var activator = new ServiceBasedControllerActivator();
            var context   = new ControllerContext(
                new ActionContext(
                    httpContext,
                    new RouteData(),
                    new ControllerActionDescriptor
            {
                ControllerTypeInfo = typeof(DIController).GetTypeInfo()
            }));

            // Act and Assert
            var ex = Assert.Throws <InvalidOperationException>(
                () => activator.Create(context));

            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 httpContext = new DefaultHttpContext
            {
                RequestServices = Mock.Of<IServiceProvider>()
            };

            var activator = new ServiceBasedControllerActivator();
            var context = new ControllerContext(
                new ActionContext(
                httpContext,
                new RouteData(),
                new ControllerActionDescriptor
                {
                    ControllerTypeInfo = typeof(DIController).GetTypeInfo()
                }));

            // Act and Assert
            var ex = Assert.Throws<InvalidOperationException>(
                () => activator.Create(context));

            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 context   = new ControllerContext(new ActionContext(
                                                      httpContext,
                                                      new RouteData(),
                                                      new ControllerActionDescriptor
            {
                ControllerTypeInfo = typeof(DIController).GetTypeInfo()
            }));

            // Act
            var instance = activator.Create(context);

            // Assert
            Assert.Same(controller, instance);
            serviceProvider.Verify();
        }
        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 context = new ControllerContext(new ActionContext(
                httpContext,
                new RouteData(),
                new ControllerActionDescriptor
                {
                    ControllerTypeInfo = typeof(DIController).GetTypeInfo()
                }));

            // Act
            var instance = activator.Create(context);

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