Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
BaseController.cs with Async
using System.Threading.Tasks;
using System.Web.Mvc;
using JetBrains.Annotations;
using ShortBus;
public abstract class BaseController : Controller
{
public IMediator Mediator { get; set; }
protected Response<TResult> Query<TResult>(IQuery<TResult> query)
{
return Mediator.Request(query);
}
protected async Task<Response<T>> QueryAsync<T>(IQuery<T> query)
{
return await Mediator.RequestAsync(query);
}
protected void Command<T>(T command)
{
var result = Mediator.Send(command);
if (result.HasException())
{
throw result.Exception;
}
}
protected async Task CommandAsync<T>(T command)
{
var result = await Mediator.SendAsync(command);
if (result.HasException())
{
throw result.Exception;
}
}
[AspMvcView]
protected ViewResult View<TData>(Response<TData> model)
{
return View(string.Empty, model);
}
protected ViewResult View<TData>([AspMvcView] string viewName, Response<TData> model)
{
if (model.HasException())
return base.View("~/Views/Shared/Error.cshtml", model);
return View(viewName, model.Data);
}
[AspMvcPartialView]
protected PartialViewResult PartialView<TData>(Response<TData> model)
{
return PartialView(string.Empty, model);
}
protected PartialViewResult PartialView<TData>([AspMvcPartialView] string viewName, Response<TData> model)
{
if (model.HasException())
return base.PartialView("~/Views/Shared/ErrorPartial.cshtml", model);
return PartialView(viewName, model.Data);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment