我有一个控制器,其中每个操作共享一个特定的参数。此外,每种方法中的第一行在操作中是通用的。
例如
public ActionResult Add(string routeName) //Common parameter
{
var object = _repository.Get(routeName); //Common line
...
}
我如何重构它,使我能够删除
var object = _repository.Get(routeName);
和/或参数,但仍然能够像以前一样访问它们?
编辑:我正在使用 IoC 将所有存储库注入到类中,因此控制器不可用。
另外,我正在使用路由:
例如
routes.MapRoute("Object-Add", "{foo}/{object}/add", new { controller = "Object", action = "Add" });
这也许也是一个问题吗?
使"var object"成为类的成员,并在构造函数中初始化它。
将此代码放在控制器类的构造函数中,您可以从请求中获取参数并存储在控制器类的字段中
Request.QueryString
只是让它成为类中的一个属性是最好的。我会使用延迟初始化,这样对象就可以在运行时同时创建,但可以在每个操作中重用。
像这样的东西?
public class MyClass
{
private _YourObject;
public MyClass(string routeName)
{
_yourObject = _repository.Get(routeName);
}
public ActionResult Add()
{
...
}
}