93 lines
3.1 KiB
C#
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);
|
|
}
|
|
}
|
|
} |