Пример #1
0
        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);
            }));
        }
Пример #2
0
 public ServiceProxy(IServiceProxyGenerator generator, IRemoteServiceCaller remoteServiceCaller)
 {
     _serviceProxyTypes   = generator.GetGeneratedServiceProxyTypes().ToList();
     _remoteServiceCaller = remoteServiceCaller;
 }
Пример #3
0
 protected ServiceProxyBase(IRemoteServiceCaller remoteServiceCaller, JimuPayload payload)
 {
     _remoteServiceCaller = remoteServiceCaller;
     this._payload        = payload;
 }
Пример #4
0
 public static IRemoteServiceCaller UseMiddleware <TMiddleware>(this IRemoteServiceCaller app, params object[] args)
 {
     return(app.UseMiddleware(typeof(TMiddleware), args));
 }
Пример #5
0
 protected ServiceProxyBase(IRemoteServiceCaller remoteServiceCaller)
 {
     _remoteServiceCaller = remoteServiceCaller;
 }