public static IRemoteServiceCaller UseMiddleware(this IRemoteServiceCaller app, Type middleware, params object[] args) { return(app.Use(next => { var methods = middleware.GetMethods(BindingFlags.Instance | BindingFlags.Public); var invokeMethods = methods.Where(m => string.Equals(m.Name, InvokeMethodName, StringComparison.Ordinal) || string.Equals(m.Name, InvokeAsyncMethodName, StringComparison.Ordinal) ).ToArray(); if (invokeMethods.Length > 1) { throw new InvalidOperationException( Resources.FormatException_UseMiddleMutlipleInvokes(InvokeMethodName, InvokeAsyncMethodName)); } if (invokeMethods.Length == 0) { throw new InvalidOperationException( Resources.FormatException_UseMiddlewareNoInvokeMethod(InvokeMethodName, InvokeAsyncMethodName)); } var methodinfo = invokeMethods[0]; if (!typeof(Task <JimuRemoteCallResultData>).IsAssignableFrom(methodinfo.ReturnType)) { throw new InvalidOperationException( Resources.FormatException_UseMiddlewareNonTaskReturnType(InvokeMethodName, InvokeAsyncMethodName, nameof(Task <JimuRemoteCallResultData>))); } var parameters = methodinfo.GetParameters(); if (parameters.Length == 0 || parameters[0].ParameterType != typeof(RemoteCallerContext) || parameters.Length > 1) { throw new InvalidOperationException( Resources.FormatException_UseMiddlewareNoParameters(InvokeMethodName, InvokeAsyncMethodName, nameof(RemoteCallerContext))); } var ctorArgs = new object[args.Length + 1]; ctorArgs[0] = next; Array.Copy(args, 0, ctorArgs, 1, args.Length); var instance = ActivatorUtilities.CreateInstance(null, middleware, ctorArgs); return (ClientRequestDel)methodinfo.CreateDelegate(typeof(ClientRequestDel), instance); })); }
public ServiceProxy(IServiceProxyGenerator generator, IRemoteServiceCaller remoteServiceCaller) { _serviceProxyTypes = generator.GetGeneratedServiceProxyTypes().ToList(); _remoteServiceCaller = remoteServiceCaller; }
protected ServiceProxyBase(IRemoteServiceCaller remoteServiceCaller, JimuPayload payload) { _remoteServiceCaller = remoteServiceCaller; this._payload = payload; }
public static IRemoteServiceCaller UseMiddleware <TMiddleware>(this IRemoteServiceCaller app, params object[] args) { return(app.UseMiddleware(typeof(TMiddleware), args)); }
protected ServiceProxyBase(IRemoteServiceCaller remoteServiceCaller) { _remoteServiceCaller = remoteServiceCaller; }