protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) { string connectionString = ConfigurationManager.ConnectionStrings["CommerceObjectContext"].ConnectionString; var productRepository = new SqlProductRepository(connectionString); var basketRepository = new SqlBasketRepository(connectionString); var discountRepository = new SqlDiscountRepository(connectionString); var discountPolicy = new RepositoryBasketDiscountPolicy(discountRepository); var basketService = new BasketService(basketRepository, discountPolicy); var currencyProvider = new CachingCurrencyProvider(new SqlCurrencyProvider(connectionString), TimeSpan.FromHours(1)); if (controllerType == typeof(BasketController)) { return(new BasketController(basketService, currencyProvider)); } if (controllerType == typeof(HomeController)) { return(new HomeController(productRepository, currencyProvider)); } return(base.GetControllerInstance(requestContext, controllerType)); }
public void CacheTimeoutWillReflectConstructorArgument() { // Fixture setup var fixture = new Fixture(); var expectedCacheTimeout = fixture.CreateAnonymous <TimeSpan>(); var sut = new CachingCurrencyProvider(new Mock <CurrencyProvider>().Object, expectedCacheTimeout); // Exercise system TimeSpan result = sut.CacheTimeout; // Verify outcome Assert.Equal <TimeSpan>(expectedCacheTimeout, result); // Teardown }
protected override IController GetControllerInstance( RequestContext requestContext, Type controllerType) { // Creates the dependencies string connectionString = ConfigurationManager.ConnectionStrings ["CommerceObjectContext"].ConnectionString; var productRepository = new SqlProductRepository(connectionString); var basketRepository = new SqlBasketRepository(connectionString); var discountRepository = new SqlDiscountRepository(connectionString); var discountPolicy = new RepositoryBasketDiscountPolicy(discountRepository); var basketService = new BasketService(basketRepository, discountPolicy); var currencyProvider = new CachingCurrencyProvider( new SqlCurrencyProvider(connectionString), TimeSpan.FromHours(1)); // returns when the appropriate controller is found if (controllerType == typeof(BasketController)) { return(new BasketController( basketService, currencyProvider)); } if (controllerType == typeof(HomeController)) { return(new HomeController( productRepository, currencyProvider)); } // handles types not specifically requested for by using their default constructor. // This uses bastard injection, and should be avoided in your own code base when possible return(base.GetControllerInstance(requestContext, controllerType)); }