问候 在我的所有控制器上,我回收了包装模型的相同代码并访问服务层 - 我很累心将其复制/粘贴到每个控制器中:
private IProjectService _service;
public New()
{
_service = new ProjectService(new ModelValidation(this.ModelState));
}
public New(IProjectService service)
{
_service = service;
}
在某些地方,我可以将其置于所有控制器访问它的位置吗?
答案 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()
{
}
}