Files
laatzen/LaaProductionWeb/LaaProductionWeb/App_Infrastructure/ControllersExtensions.cs
T

93 lines
3.1 KiB
C#

namespace LaaProductionWeb.App_Infrastructure
{
using Microsoft.Extensions.DependencyInjection;
using System;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Security.Claims;
using System.Security.Principal;
using System.Web.Http;
using System.Web.Http.Controllers;
using System.Web.Http.Dispatcher;
using System.Web.Mvc;
public static class ControllersExtensions
{
public static IServiceCollection AddControllers(this IServiceCollection services)
{
var controllers = typeof(ControllersExtensions)
.Assembly
.GetTypes()
.Where(x => !x.IsAbstract
&& typeof(IController).IsAssignableFrom(x));
foreach (var controller in controllers)
{
services.AddTransient(controller);
}
return services;
}
public static IServiceCollection AddAPIControllers(this IServiceCollection services)
{
var controllers = typeof(ControllersExtensions)
.Assembly
.GetTypes()
.Where(x => !x.IsAbstract
&& typeof(IHttpController).IsAssignableFrom(x));
foreach (var controller in controllers)
{
services.AddTransient(controller);
}
return services;
}
public static IServiceProvider BuildControllerFactory(this IServiceProvider serviceProvider)
{
var controllerFactory = new ControllerFactory(serviceProvider);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator), new APIControllerActivator(serviceProvider));
GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerSelector), new APIControllerFactory());
return serviceProvider;
}
public static string Name(this IPrincipal principal)
{
if (principal is ClaimsPrincipal claimsPrincipal)
{
return claimsPrincipal
.FindAll(ClaimTypes.Name)
.LastOrDefault()?.Value;
}
return "<unknown>";
}
public static string Display<T>(this T model, Expression<Func<T, object>> expression)
{
if (expression.Body is MemberExpression memberExpression)
{
return memberExpression
.Member
.GetCustomAttribute<DisplayAttribute>()
.GetName();
}
else if (expression.Body is UnaryExpression unaryExpression && unaryExpression.Operand is MemberExpression operandExpression)
{
return operandExpression
.Member
.GetCustomAttribute<DisplayAttribute>()
.GetName();
}
return default(string);
}
}
}