Files
mixtape/zero.Web/Controllers/ZeroController.cs
T

44 lines
1.1 KiB
C#
Raw Normal View History

2020-10-27 00:24:49 +01:00
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System;
2020-11-06 14:16:11 +01:00
using zero.Core.Api;
2020-10-27 00:24:49 +01:00
using zero.Core.Entities;
using zero.Core.Routing;
2020-11-06 14:16:11 +01:00
using Microsoft.Extensions.DependencyInjection;
2020-11-16 01:07:07 +01:00
using zero.Core;
2020-10-27 00:24:49 +01:00
namespace zero.Web.Controllers
{
public abstract class ZeroController : ZeroController<IResolvedRoute>
{
}
public abstract class ZeroController<T> : Controller where T : IResolvedRoute
{
2021-05-04 17:23:52 +02:00
protected Application Application { get; set; }
2020-10-27 00:24:49 +01:00
protected virtual T Route { get; set; }
2020-12-09 13:42:23 +01:00
IZeroContext _context;
protected IZeroContext Context => _context ?? (_context = HttpContext?.RequestServices?.GetService<IZeroContext>());
2020-10-27 00:24:49 +01:00
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
2020-12-09 13:42:23 +01:00
Application = Context?.Application;
2020-10-27 00:24:49 +01:00
if (filterContext.RouteData.Values.TryGetValue("zero.route", out object route))
{
if (!(route is T))
{
throw new InvalidCastException($"Could not cast IResolvedRoute to {typeof(T)}");
}
Route = (T)route;
}
base.OnActionExecuting(filterContext);
}
}
}