MVC模型状态

时间:2010-03-22 15:04:57

标签: asp.net-mvc

问候 在我的所有控制器上,我回收了包装模型的相同代码并访问服务层 - 我很累心将其复制/粘贴到每个控制器中:

private IProjectService _service;
public New()
{
_service = new ProjectService(new ModelValidation(this.ModelState));
}
public New(IProjectService service)
{
_service = service;
}

在某些地方,我可以将其置于所有控制器访问它的位置吗?

4 个答案:

答案 0 :(得分:5)

您可以放入所有其他控制器继承自的基本控制器类:

public class BaseController : Controller
{
    protected IProjectService Service { get; private set; }
    public New()
    {
        Service = new ProjectService(new ModelValidation(this.ModelState));
    }
    public New(IProjectService service)
    {
        Service = service;
    }
}

或者,您可以阅读dependency injection并查看使用IOC容器注入这些依赖项。

答案 1 :(得分:2)

欢迎来到code smells的精彩世界。你找到一个甚至不知道它是什么。每当你想到自己。 “一定有更好的方法。”有。在这种情况下,基类将大大有助于解决您的问题。

答案 2 :(得分:1)

控制器基类?

答案 3 :(得分:1)

创建一个基本控制器,并从中派生控制器。

 public class BaseController : Controller
 { 
      protected IProjectService _service;
      public New()
      {
           _service = new ProjectService(new ModelValidation(this.ModelState));
      }
      public New(IProjectService service)
      {
           _service = service;
      }
 }
 public class MyController : BaseController
 {
     public ActionResult Index()
     {
     }
 }