private object ExecuteInternal(HttpListenerContext context, object param) { return(_methodInfo.Invoke(_restServerService.GetInstance(context), new object[] { param })); }
private void TryExposeRestServerService(Type RestServerServiceType, RestServerServiceInstanceType instanceType) { ExposedRestServerService exposedRestServerService = new ExposedRestServerService(_restServerDependencyResolver) { ServiceType = RestServerServiceType, InstanceType = instanceType, }; foreach (var method in RestServerServiceType.GetMethods(BindingFlags.Public | BindingFlags.Instance)) { var methodAttribute = method.GetCustomAttribute <RestServerServiceCallAttribute>(); if (methodAttribute == null) { continue; } if (string.IsNullOrEmpty(methodAttribute.Route)) { throw new ArgumentException($"Invalid route given: {methodAttribute.Route}", nameof(RestServerServiceCallAttribute.Route)); } var routeStr = MakeRoute(methodAttribute.Route); if (IsRouteAlreadyRegistered(routeStr)) { throw new ArgumentException($"Route already registered. {routeStr}", nameof(RestServerServiceCallAttribute.Route)); } Type inputType = null; var parameters = method.GetParameters(); if (parameters != null && parameters.Length > 1) { Log.w($"{nameof(RestServerServiceRouteHandler)}: Method Parameter missmatch. Too many parameters. {routeStr}"); continue; } if (parameters != null && parameters.Length == 1) { var parameterInfo = parameters[0]; var parameterTypeInfo = parameterInfo.ParameterType.GetTypeInfo(); if (!parameterTypeInfo.IsClass) { Log.w($"{nameof(RestServerServiceRouteHandler)}: Method Parameter missmatch. Parameter is no class! {routeStr}"); continue; } inputType = parameterInfo.ParameterType; } var exposedRestServerAction = new ExposedRestServerAction(exposedRestServerService, method) { OutputType = method.ReturnType, InputType = inputType, Route = routeStr, Methods = methodAttribute.Methods?.Split(',').Select(str => str.Trim().ToUpper()).ToArray() ?? new string[0] }; exposedRestServerService.Routes.Add(exposedRestServerAction); Log.i($"{nameof(RestServerServiceRouteHandler)}: \"{RestServerServiceType.FullName}\" exposed API method \"{exposedRestServerAction.Route}\"."); } // We got any routes exposed? if (exposedRestServerService.Routes.Count > 0) { if (exposedRestServerService.InstanceType == RestServerServiceInstanceType.SingletonStrict) { exposedRestServerService.GetInstance(null); } _exposedRestServerServices.Add(exposedRestServerService); } }