我正在使用ASP.NET MVC应用程序&有一个快速的设计问题给你。 所以我需要为我的所有控制器(嗯,大多数)实现一个通用功能。 我不想在所有控制器中重复相同的逻辑。 什么是最符合MVC最佳利益的理想方法?
我发现有人说创建基本控制器并在控制器中继承它。但是当我想象一个控制器时,我可以看到它只包含返回一些内容/视图的动作方法 - 如果我错了,请纠正我。
OneController
{
ActionMethod A1
{
//Code to return list of objects for the given integer value. So it calls database stored procedure.
}
}
......有多个这样的控制器。
我仍然希望在OneController中存在A1,只是把它的逻辑放在某个常见的地方。
也有人建议创建普通的Helper类来放置常用方法。
你能否告诉我什么方法会更好(或任何其他适当的方法)?感谢。
答案 0 :(得分:1)
我同意你的观点,在大多数情况下,当我们谈论Actions
或真正相关的方法时,从基础控制器继承是有意义的。但是,当然,你可以只使用基本控制器。你的选择。
除此之外,您还有2个选项。对于几乎没有多态性的类(根据实现而改变行为),您可以创建静态类并在控制器中使用它们。一个例子是进行数学计算的类,这些类本质上不是多态的。
对于所有其他情况,我强烈建议您使用依赖注入。其中一个原因是单元测试将变得更容易。这里有一个关于如何使用内置引擎为MVC 4开始的指南:https://www.asp.net/mvc/overview/older-versions/hands-on-labs/aspnet-mvc-4-dependency-injection。如果您不想使用它并使用Ninject或Simple Injector,您可以实现自己的ControllerActivator
并使用Ninject
来获取控制器的实例。
使用依赖注入器时,通常你的控制器会在构造函数中获取依赖项,如下所示:
public class StoreController : Controller
{
private IStoreService service;
public StoreController(IStoreService service)
{
// service in an injected dependency
this.service = service;
}
}
有关更多信息,请参阅Google ASP.NET依赖注入。