public HomeViewModel AutoMappingHomeViewModel() { var model = new HomeViewModel(); model.ListOfProducts = new List <ProductViewModel>(); model.ListOfCategories = new List <CategoryOverviewViewModel>(); //Setup automapping var mapperOne = mapextension.ProductToProductviewmodel(); var mapperSO = mapextension.SpecialOfferToProductviewmodel(); //For every product in system foreach (var singleProduct in productRepo.RetrieveAllProducts()) { singleProduct.ProductCategories = categoryRepo.RetrieveCategoriesFromProduct(singleProduct); ProductViewModel pmodel = new ProductViewModel(); pmodel.IsSpecialOffer = singleProduct.RetrieveSpecialOffer(); //Check if product is specialoffer if (singleProduct is SpecialOffer) { pmodel = mapperSO.Map <ProductViewModel>(singleProduct); } else { pmodel = mapperOne.Map <ProductViewModel>(singleProduct); } //Filling categories for specific product foreach (Category c in categoryRepo.RetrieveCategoriesFromProduct(singleProduct)) { //Set up automapping var mapperTwo = mapextension.CategoryToCategoryOverviewViewModel(); CategoryOverviewViewModel m = mapperTwo.Map <CategoryOverviewViewModel>(c); pmodel.ProductCategories.Add(m); } model.ListOfProducts.Add(pmodel); } foreach (Category c in categoryRepo.RetrieveAllCategories()) { //Set up automapping var mapperTwo = mapextension.CategoryToCategoryOverviewViewModel(); CategoryOverviewViewModel m = mapperTwo.Map <CategoryOverviewViewModel>(c); model.ListOfCategories.Add(m); } foreach (Post p in postRepo.RetrieveAllPosts()) { //Set up automapping var mapperThree = mapextension.PostToPostViewModel(); PostViewModel pmodel = mapperThree.Map <PostViewModel>(p); model.PostsInSystem.Add(pmodel); } //Get currently logged in user var loggedInUser = HttpContext.Session.GetObjectFromJson <UserViewModel>("ComplexObject"); model.UserLoggedIn = loggedInUser; return(model); }