0

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

我为一般实体提供服务,并为特定子实体提供许多服务。

这是我的划痕:

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*/}
}

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

如果我不这样做,我会得到很多垃圾代码在任何地方做同样的事情。还有其他方法吗?也许是我没有意识到的模式?

4

1 回答 1

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

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

于 2013-11-05T12:40:54.900 回答