使用Unity of Work类的ASP.NET MVC Controller中的重复代码

时间:2015-07-27 21:03:09

标签: asp.net-mvc entity-framework

根据this ASP.NET MVC article我创建了一个Unity of Work类和一个通用存储库。

我有很多模型类以及总是相同的控制器操作,如创建,更新,删除等。因此,在每个控制器中,Create操作看起来像

      public ActionResult Create(
      [Bind(Include = "CourseID,Title,Credits,DepartmentID")]
     Course course)
  {
     try
     {
        if (ModelState.IsValid)
        {
           unitOfWork.CourseRepository.Insert(course);
           unitOfWork.Save();
           return RedirectToAction("Index");
        }
     }
     catch (DataException)
     {
        ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists, see your system administrator.");
     }
     return View(course);
  }

所以我的问题是:是否可以创建例如a"全球" ActionResult"创建"在BaseController中,根据实体使用正确的UoW存储库(或通过工作类Unity的相关存储库)?

在特定的控制器操作中,我只想将此全局方法称为:

return new BaseController().Create(entity) 

1 个答案:

答案 0 :(得分:0)

通常BaseController是一个抽象类,不应该用它来创建一个实例。我认为您应该运行Create from specific Controller,如下所示:

return new CourseController(new CourseRepository()).Create(course);

BaseController应该实现像IRepository.Create这样的接口,并且在特定控制器的初始化时你可以通过正确的存储库 - 也许在IoC的帮助下你可以请求所有Dependencies注入的CourseController。

我希望这会有所帮助。