diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2017-02-12 20:07:48 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2017-02-12 20:07:48 -0500 |
| commit | 0a03d7ad9fe6554b78963445f012464023113614 (patch) | |
| tree | db7c353f9759d6d4259ee3fc017b569cba6f383c /ServiceStack/Host/ServiceExec.cs | |
| parent | a6e7438987ebd0ef2c44940f76e6efd487803e02 (diff) | |
localization fixes
Diffstat (limited to 'ServiceStack/Host/ServiceExec.cs')
| -rw-r--r-- | ServiceStack/Host/ServiceExec.cs | 156 |
1 files changed, 0 insertions, 156 deletions
diff --git a/ServiceStack/Host/ServiceExec.cs b/ServiceStack/Host/ServiceExec.cs deleted file mode 100644 index cb501a3ad..000000000 --- a/ServiceStack/Host/ServiceExec.cs +++ /dev/null @@ -1,156 +0,0 @@ -//Copyright (c) Service Stack LLC. All Rights Reserved. -//License: https://raw.github.com/ServiceStack/ServiceStack/master/license.txt - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Reflection; -using System.Threading.Tasks; -using MediaBrowser.Model.Services; - -namespace ServiceStack.Host -{ - public static class ServiceExecExtensions - { - public static IEnumerable<MethodInfo> GetActions(this Type serviceType) - { - foreach (var mi in serviceType.GetRuntimeMethods().Where(i => i.IsPublic && !i.IsStatic)) - { - if (mi.GetParameters().Length != 1) - continue; - - var actionName = mi.Name.ToUpper(); - if (!HttpMethods.AllVerbs.Contains(actionName) && actionName != ActionContext.AnyAction) - continue; - - yield return mi; - } - } - } - - internal static class ServiceExecGeneral - { - public static Dictionary<string, ActionContext> execMap = new Dictionary<string, ActionContext>(); - - public static void CreateServiceRunnersFor(Type requestType, List<ActionContext> actions) - { - foreach (var actionCtx in actions) - { - if (execMap.ContainsKey(actionCtx.Id)) continue; - - execMap[actionCtx.Id] = actionCtx; - } - } - - public static async Task<object> Execute(Type serviceType, IRequest request, object instance, object requestDto, string requestName) - { - var actionName = request.Verb - ?? HttpMethods.Post; //MQ Services - - ActionContext actionContext; - if (ServiceExecGeneral.execMap.TryGetValue(ActionContext.Key(serviceType, actionName, requestName), out actionContext) - || ServiceExecGeneral.execMap.TryGetValue(ActionContext.AnyKey(serviceType, requestName), out actionContext)) - { - if (actionContext.RequestFilters != null) - { - foreach (var requestFilter in actionContext.RequestFilters) - { - requestFilter.RequestFilter(request, request.Response, requestDto); - if (request.Response.IsClosed) return null; - } - } - - var response = actionContext.ServiceAction(instance, requestDto); - - var taskResponse = response as Task; - if (taskResponse != null) - { - await taskResponse.ConfigureAwait(false); - response = ServiceStackHost.Instance.GetTaskResult(taskResponse, requestName); - } - - return response; - } - - var expectedMethodName = actionName.Substring(0, 1) + actionName.Substring(1).ToLower(); - throw new NotImplementedException(string.Format("Could not find method named {1}({0}) or Any({0}) on Service {2}", requestDto.GetType().GetOperationName(), expectedMethodName, serviceType.GetOperationName())); - } - - public static List<ActionContext> Reset(Type serviceType) - { - var actions = new List<ActionContext>(); - - foreach (var mi in serviceType.GetActions()) - { - var actionName = mi.Name.ToUpper(); - var args = mi.GetParameters(); - - var requestType = args[0].ParameterType; - var actionCtx = new ActionContext - { - Id = ActionContext.Key(serviceType, actionName, requestType.GetOperationName()) - }; - - try - { - actionCtx.ServiceAction = CreateExecFn(serviceType, requestType, mi); - } - catch - { - //Potential problems with MONO, using reflection for fallback - actionCtx.ServiceAction = (service, request) => - mi.Invoke(service, new[] { request }); - } - - var reqFilters = new List<IHasRequestFilter>(); - - foreach (var attr in mi.GetCustomAttributes(true)) - { - var hasReqFilter = attr as IHasRequestFilter; - - if (hasReqFilter != null) - reqFilters.Add(hasReqFilter); - } - - if (reqFilters.Count > 0) - actionCtx.RequestFilters = reqFilters.OrderBy(i => i.Priority).ToArray(); - - actions.Add(actionCtx); - } - - return actions; - } - - private static ActionInvokerFn CreateExecFn(Type serviceType, Type requestType, MethodInfo mi) - { - var serviceParam = Expression.Parameter(typeof(object), "serviceObj"); - var serviceStrong = Expression.Convert(serviceParam, serviceType); - - var requestDtoParam = Expression.Parameter(typeof(object), "requestDto"); - var requestDtoStrong = Expression.Convert(requestDtoParam, requestType); - - Expression callExecute = Expression.Call( - serviceStrong, mi, requestDtoStrong); - - if (mi.ReturnType != typeof(void)) - { - var executeFunc = Expression.Lambda<ActionInvokerFn> - (callExecute, serviceParam, requestDtoParam).Compile(); - - return executeFunc; - } - else - { - var executeFunc = Expression.Lambda<VoidActionInvokerFn> - (callExecute, serviceParam, requestDtoParam).Compile(); - - return (service, request) => - { - executeFunc(service, request); - return null; - }; - } - } - } -}
\ No newline at end of file |
