BaseController em ASP.NET MVC

Em vez de repetir ações comuns em seu código, tente implementar classes abstratas para fazer o trabalho.

Cada controlador na ASP.NET MVC lida com TempMessages, ViewBags, novas instâncias de classes e muito mais.

Por que você não cria um controlador básico que implementa essas ações comuns e pode ser acessível por todos os controladores derivados?

Algo assim:

public abstract partial class BaseController : Controller
{
public UnitOfWork unitOfWork;

public BaseController()
{
unitOfWork
= new UnitOfWork();
}

public String ErrorMessage
{
get { return TempData["ErrorMessage"] == null ? String.Empty : TempData["ErrorMessage"].ToString(); }
set { TempData["ErrorMessage"] = value; }
}
}

E pode ser usado assim:

public partial class HomeController : BaseSecuredController
{
public KioskController()
: base()
{
}

public virtual ActionResult Index()
{
try
{
var result = unitOfWork.DoSomething();
}
catch(Exception ex)
{
ErrorMessage = "Ooops, something went wrong: " + ex.Message;
}
return View();
}
}

Muito mais limpo, não acha? Você usa esse tipo de método? Algumas pessoas têm medo de modificadores “estranhos”, como abstrato ou parcial.