我正在开发一个通用控制器来处理文件上传和下载。我的域包含将保存任何文件的通用实体,以及将引用此文件以保存特定文件引用的其他子实体。
我为一般实体提供服务,为儿童特定实体提供大量服务。
继承我的划痕:
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*/}
}
如何将特定服务注入操作?
如果我不这样做,我会得到很多垃圾代码在各处做同样的事情。还有另外一种方法吗?也许是一种我没有意识到的模式?
答案 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实例。