Example #1
0
 /// <summary>
 /// Default constructor
 /// </summary>
 /// <param name="types"></param>
 /// <param name="apiInformation"></param>
 /// <param name="activator"></param>
 public TypeSetExposureConfiguration(IEnumerable <Type> types, ICurrentApiInformation apiInformation, IInstanceActivator activator, IArrayMethodInvokerBuilder invokerBuilder)
 {
     _types          = types;
     _apiInformation = apiInformation;
     _activator      = activator;
     _invokerBuilder = invokerBuilder;
 }
Example #2
0
 public ApiConfigurationProvider(IServiceProvider appServices, IInstanceActivator activator, IArrayMethodInvokerBuilder invokerBuilder, IOptions <RpcServiceConfiguration> rpcConfiguration)
 {
     _activator        = activator;
     _invokerBuilder   = invokerBuilder;
     _rpcConfiguration = rpcConfiguration;
     AppServices       = appServices;
 }
Example #3
0
 public ExposedMethodInformation(Type type,
                                 IEnumerable <string> routeNames,
                                 string methodName,
                                 MethodInfo method,
                                 IMethodAuthorization[] methodAuthorizations,
                                 Func <ICallExecutionContext, IEnumerable <ICallFilter> >[] filters,
                                 IInstanceActivator instanceActivator,
                                 IArrayMethodInvokerBuilder invokeMethodBuilder,
                                 bool allowCompression,
                                 string obsoleteMessage)
 {
     _invokeMethodBuilder = invokeMethodBuilder;
     _allowCompression    = allowCompression;
     Type                 = type;
     RouteNames           = routeNames;
     MethodName           = methodName;
     MethodInfo           = method;
     MethodAuthorizations = methodAuthorizations;
     Filters              = filters;
     ObsoleteMessage      = obsoleteMessage;
     InstanceType         = MethodInfo.DeclaringType;
     InstanceProvider     = (context, provider) => instanceActivator.ActivateInstance(context, provider, Type);
     Parameters           = GenerateParameters();
 }
Example #4
0
 public ExposureConfiguration(Type type, ICurrentApiInformation apiInformation, IInstanceActivator activator, IArrayMethodInvokerBuilder invokerBuilder) : base(apiInformation, activator, invokerBuilder)
 {
     _type = type;
 }
Example #5
0
        /// <summary>
        /// Get all exposed methods from a type given a current state
        /// </summary>
        /// <param name="type"></param>
        /// <param name="currentApi"></param>
        /// <param name="namesFunc"></param>
        /// <param name="authorizations"></param>
        /// <param name="methodFilter"></param>
        /// <param name="activator"></param>
        /// <param name="invokerBuilder"></param>
        /// <param name="obsoleteMessage"></param>
        /// <returns></returns>
        public static IEnumerable <ExposedMethodInformation> GetExposedMethods(Type type,
                                                                               ICurrentApiInformation currentApi,
                                                                               Func <Type, IEnumerable <string> > namesFunc,
                                                                               List <IMethodAuthorization> authorizations,
                                                                               Func <MethodInfo, bool> methodFilter,
                                                                               IInstanceActivator activator,
                                                                               IArrayMethodInvokerBuilder invokerBuilder,
                                                                               string obsoleteMessage)
        {
            var names = namesFunc(type).ToList();

            List <string> finalNames;

            if (currentApi.Prefixes.Count > 0)
            {
                var newNames = new List <string>();

                foreach (var prefixes in currentApi.Prefixes)
                {
                    foreach (var prefix in prefixes(type))
                    {
                        foreach (var name in names)
                        {
                            newNames.Add(prefix + name);
                        }
                    }
                }

                finalNames = newNames;
            }
            else
            {
                finalNames = names;
            }

            foreach (var authorization in currentApi.Authorizations)
            {
                foreach (var methodAuthorization in authorization(type))
                {
                    authorizations.Add(methodAuthorization);
                }
            }

            foreach (var method in type.GetRuntimeMethods())
            {
                if (method.IsStatic ||
                    !method.IsPublic ||
                    method.DeclaringType == typeof(object))
                {
                    continue;
                }

                var filterOut = currentApi.MethodFilters.Any(func => !func(method));

                if (filterOut)
                {
                    continue;
                }

                if (methodFilter != null && !methodFilter(method))
                {
                    continue;
                }

                var filters = new List <Func <ICallExecutionContext, IEnumerable <ICallFilter> > >();

                foreach (var func in currentApi.Filters)
                {
                    var filter = func(method);

                    if (filter != null)
                    {
                        filters.Add(filter);
                    }
                }

                var currentAuth = new List <IMethodAuthorization>(authorizations);
                var obsolete    = ProcessAttributesOnMethod(method, currentAuth, filters);

                obsoleteMessage = obsoleteMessage ?? obsolete;

                var authArray = currentAuth.Count > 0 ? currentAuth.ToArray() : Array.Empty <IMethodAuthorization>();

                var filterArray = filters.Count > 0
                    ? filters.ToArray()
                    : Array.Empty <Func <ICallExecutionContext, IEnumerable <ICallFilter> > >();

                yield return(new ExposedMethodInformation(type,
                                                          finalNames,
                                                          currentApi.NamingConventions.MethodNameGenerator(method),
                                                          method,
                                                          authArray,
                                                          filterArray,
                                                          activator,
                                                          invokerBuilder,
                                                          currentApi.SupportResponseCompression,
                                                          obsoleteMessage));
            }
        }
Example #6
0
 /// <summary>
 /// Default constructor
 /// </summary>
 /// <param name="apiInformation"></param>
 /// <param name="activator"></param>
 /// <param name="arrayMethodInvokerBuilder"></param>
 protected BaseExposureConfiguration(ICurrentApiInformation apiInformation, IInstanceActivator activator, IArrayMethodInvokerBuilder arrayMethodInvokerBuilder)
 {
     ApiInformation             = apiInformation;
     _activator                 = activator;
     _arrayMethodInvokerBuilder = arrayMethodInvokerBuilder;
 }