通过动态选择方法使控制器更有效率
本文关键字:控制器 有效率 方法 动态 选择 | 更新日期: 2023-09-27 18:21:29
我的存储库中有以下两种方法:
public IEnumerable<Post> Posts
{
get { return context.Posts; }
}
public IEnumerable<Editables> Editables
{
get { return context.Editables;
}
这是我的方法:
public ActionResult SaveEdit(int activeid,string text, string prop, string REPOMETHOD)
{
var elementToEdit = _repository.<dynamic insert Post or Editable>.ElementAt(activeid);
var type = elementToEdit.GetType();
PropertyInfo p = type.GetProperty(prop);
p.SetValue(elementToEdit, text, null);
_repository.UpdateBigLinkEdit(elementToEdit, activeid);
return null;
}
因此,ii有可能使这个metid更加动态,并插入正确的方法
_repository.Editables.ElementAt(activeid) OR _repository.Post.ElementAt(activeid);
通过从我的视野中传递冥王的名字?还是我必须换一种方式?
是的,您可以使用通用方法:
public T GetElement<T>(int id)
{
if (typeof(T) == typeof(Post)) return Posts.ElementAt(id);
if (typeof(T) == typeof(Editable)) return Editables.ElementAt(id);
throw new InvalidTypeException();
}
然后使用
var element = _repository.GetElement<Post>(activeId);
如果Posts
或Editables
对象的使用是以用户输入为条件的,则应该有单独的控制器方法来处理每个请求。您仍然可以通过让它们各自调用相同的方法来重用代码:
public ActionResult Save(int activeId, string text)
{
var elementToEdit = _repository.Posts.ElementAt(activeid);
return SaveEdit(activeId, text, elementToEdit);
}
public ActionResult Edit(int activeId, string text)
{
var elementToEdit = _repository.Editables.ElementAt(activeId);
return SaveEdit(activeId, text, elementToEdit);
}
private ActionResult SaveEdit(int activeId, string text, object elementToEdit)
{
// logic from your original method
}
如果使用任一对象的条件是而不是取决于用户输入,那么您应该能够在原始代码示例中使用if
条件来设置elementToEdit
对象。