У меня был один и тот же вопрос, и я ответил на него по-разному. Я действительно не хотел использовать наследование для этого, поэтому вместо этого я использовал лямбду.
Во-первых, у меня есть объект, который я передаю от моего контроллера методу, которому я хочу вернуть представление:
public struct MyControllerContext
{
public HttpRequestBase Request { get; set; }
public HttpResponseBase Response { get; set; }
public DocsController Controller { get; set; }
public Func<string, object, ViewResult> ViewResult;
public ViewResult View(string viewName, object model)
{
return this.ViewResult(viewName, model);
}
}
Я создаю экземпляр этого и передаю его в качестве параметра методу, который будет возвращать результат:
// In the controller
var context = new DocsControllerContext()
{
Request = Request,
Response = Response,
Controller = this,
ViewResult = (viewName, model) =>
{
return View(viewName, model);
}
};
var returnValue = methodInfo.Invoke(toInvoke, new object[] { context });
return returnValue;
Затем в методе, который я вызвал, я могу вызвать context.View("ViewName", model);
. Вариантов может быть много, основная идея - использовать обратный вызов.