多个控制器之间的共享方法C#MVC4

多个控制器之间的共享方法C#MVC4,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,我在六个控制器中调用了相同的方法。现在我在每个控制器之间复制和粘贴。所有控制器都在同一命名空间中。该方法基于传递的id返回bool。例如: public bool CheckSubmission(int id =0) { Get Records from DB with criteria If Record available return true else return false } 我已经离开C++ C++一段时间了,找不到如何写一次。我知道在Rails中,我可

我在六个控制器中调用了相同的方法。现在我在每个控制器之间复制和粘贴。所有控制器都在同一命名空间中。该方法基于传递的id返回bool。例如:

public bool CheckSubmission(int id =0)
{
    Get Records from DB with criteria
    If Record available return true
    else return false
}

我已经离开C++ C++一段时间了,找不到如何写一次。我知道在Rails中,我可以将共享函数放在ApplicationController中。关于这一点,我已经看到了一些问题,但不是一个明确的例子,它们更接近于OOP。当我回到这里时,任何帮助都将不胜感激

创建一个继承自
Controller
ControllerBase
类,将此方法放入其中

让您的控制器继承自您的基本控制器-他们将使用此实现

public class ControllerBase : Controller
{
  public bool CheckSubmission(int id = 0)
  {
    Get Records from DB with criteria
    If Record available return true
    else return false
  }
}

public class SomethingController : ControllerBase
{
    // Can use CheckSubmission in here
}

我特别不喜欢这个建议,但我同意,我已经用过了,而且很有效。扩展方法会更好。静态bool CheckSubmission(这个控制器,int id){blah;blah;}那么您不需要记住继承控制器。更好地维护基本控制器是一个难点,检查应该移动到一个不同的服务类,作为(构造函数)依赖项注入到任何需要的控制器中。如果您的共享方法返回一个
ActionResult
,那么继承解决方案比扩展解决方案更好。这是因为扩展方法中的控制器对象由于其保护级别而无法访问View()或Redirect()或RedirectToAction()。通过继承,可以处理视图的控制器方法:
public class SomethingController:ControllerBase{//GET:/Something//Parent object handles Index}
服务建议很简单,是@superjos建议的最佳解决方案。如果您需要通过“CheckSubmission”方法访问“SomethingController”的属性,该怎么办。这违背了OOP原则,不可能发生。这是否意味着您仍然需要使用复制粘贴解决方案?