代码之家  ›  专栏  ›  技术社区  ›  gnome

MVC模型状态

  •  4
  • gnome  · 技术社区  · 16 年前

    问候语 在我的所有控制器上,我都会回收包装模型和访问服务层的相同代码——我已经厌倦了将其复制/粘贴到每个控制器中:

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

    有什么地方我可以把它放在我所有的控制器都可以访问的地方吗?

    4 回复  |  直到 16 年前
        1
  •  5
  •   David M    16 年前

    您可以将所有其他控制器继承自一个基本控制器类:

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

        2
  •  2
  •   Matthew Vines    16 年前

    欢迎来到美好的世界 code smells . 你甚至不知道那是什么就找到了。只要你自己想。”必须有更好的方法。在这种情况下,基类将在很大程度上解决您的问题。

        3
  •  1
  •   Arnis Lapsa    16 年前

    控制器基类?

        4
  •  1
  •   mlsteeves    16 年前

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

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