将服务注入MVC​​ Action Method

时间:2013-11-05 12:29:54

标签: c# asp.net asp.net-mvc dependency-injection

我正在开发一个通用控制器来处理文件上传和下载。我的域包含将保存任何文件的通用实体,以及将引用此文件以保存特定文件引用的其他子实体。

我为一般实体提供服务,为儿童特定实体提供大量服务。

继承我的划痕:

public class FileController : BaseController
{
  public JsonResult GetAll(IService childService) { /*lot of code*/}
  public FileResult Download(int id, IService  childService) { /*lot of code*/}
  public JsonResult Post(IService childService) { /*lot of code*/}
  public JsonResult Delete(IService childService) { /*lot of code*/}
}

如何将特定服务注入操作?

如果我不这样做,我会得到很多垃圾代码在各处做同样的事情。还有另外一种方法吗?也许是一种我没有意识到的模式?

1 个答案:

答案 0 :(得分:3)

不是注入操作,而是将服务注入到类中:

public class FileController : BaseController
{
    private IService _childService;

    public IService ChildService { set { _childService = value; } }

    public JsonResult GetAll() { /*lot of code*/}
    public FileResult Download(int id) { /*lot of code*/}
    public JsonResult Post() { /*lot of code*/}
    public JsonResult Delete(IService childService) { /*lot of code*/}
}

然后,创建自定义ControllerFactory以扩展DefaultControllerFactory并在Global.asax文件中指定。{/ p>

最后,让您的自定义ControllerFactory类覆盖CreateController方法,并在创建控制器时注入IService实例。