public ActionResult Create(Product product)
        {
            if (ModelState.IsValid)
            {
               productService.AddProduct(product);

                return RedirectToAction("Index");
            }

            return View(product);
        }
 //public ProductService()
 //{
 //    this._unitOfWork = new UnitOfWork();
 //}
 public void AddProduct(Product product)
 {
     _unitOfWork.ProductRepository.Add(product);
        _unitOfWork.Save();
 }
 public void UpdateProduct(Product product)
 {
     _unitOfWork.ProductRepository.Edit(product);
        _unitOfWork.Save();
 }
        public void Can_Update_Product_Service()
        {
            //Arrange
            List<Product> products = new List<Product>()
                                         {
                                             new Product(){Description="P1",ProductId=1,ProductName="p1Name"},
                                             new Product(){Description="P2",ProductId=2,ProductName="p2Name"},
                                             new Product(){Description="P3",ProductId=3,ProductName="p3Name"},
                                             new Product(){Description="P4",ProductId=4,ProductName="p4Name"},
                                             new Product(){Description="P5",ProductId=5,ProductName="p5Name"},
                                             new Product(){Description="P6",ProductId=6,ProductName="p6Name"},

                                         };
            Mock<IGenericRepository<Product>> mock1 = new Mock<IGenericRepository<Product>>();

            //Here we are going to mock repository Edit method
            mock1.Setup(m => m.Edit(It.IsAny<Product>())).Returns((Product target) =>
            {
                var original = products.FirstOrDefault(
                    q => q.ProductId == target.ProductId);

                if (original == null)
                {
                    return false;
                }

                original.ProductName = target.ProductName;

                original.Description = target.Description;

                return true;
            });

            //Now we have our repository ready for property injection

            //Here we are going to mock our IUnitOfWork
            Mock<IUnitOfWork> mock = new Mock<IUnitOfWork>();

            //Here we are going to inject our repository to the property
            mock.Setup(m => m.ProductRepository).Returns(mock1.Object);

            //Now our UnitOfWork is ready to be injected to the service
            //Here we inject UnitOfWork to constractor of our service
            ProductService productService = new ProductService(mock.Object);

            //Act

            var updatedProduct = new Product() {ProductId = 1, ProductName = "p1NameModified", Description = "p1Modified"};
            productService.UpdateProduct(updatedProduct);
            var actualProduct = products.FirstOrDefault(t => t.ProductId == 1);
            //Assert

            Assert.AreEqual(actualProduct.ProductName ,updatedProduct.ProductName);
            Assert.AreEqual(actualProduct.Description, updatedProduct.Description);
        }