2010-03-22 87 views
4

问候 在我的所有控制器我回收一个包装我的模型和访问服务层相同的代码 - 我累复制/粘贴到每个控制器:MVC模型状态

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

有没有什么地方可以将我的所有控制器都存放在哪里?

回答

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容器注入这些依赖。

+0

+1提到DI,我会添加做IProjectService的构造函数注入,因为控制器类取决于服务&不能执行没有服务的有效实例 – Sunny 2010-03-22 15:23:53

+0

@Sunny - 对此的不同学派。我理解使用构造函数注入来获得必要的依赖关系的论据,但是也有一个论点是使用一致的注入方法,当然并不是所有的IOC容器都像其他方法一样容易地支持所有的方法。但是,这是OP在希望阅读这个主题时能够拿起的那种东西。 – 2010-03-22 15:53:52

1

控制器基类?

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() 
    { 
    } 
} 
2

欢迎来到美好的世界code smells。你甚至不知道它是什么。每当你想到自己。 “一定有更好的方法。”有。在这种情况下,基类对解决您的问题将会有很长的路要走。

+1

是的,无论何时您复制/粘贴大量代码,通常都有更好的方法! :) – mlsteeves 2010-03-22 15:10:45