예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="middlewaretype"></param>
        /// <param name="args"></param>
        /// <returns></returns>
        public static IControlLoopBuilder Use(this IControlLoopBuilder builder, Type middlewaretype, params object[] args)
        {
            if (builder is null)
            {
                throw new ArgumentNullException(nameof(builder));
            }
            if (middlewaretype is null)
            {
                throw new ArgumentNullException(nameof(middlewaretype));
            }

            builder.Use(point =>
            {
                if (!typeof(IControlLoopMiddleware).IsAssignableFrom(middlewaretype))
                {
                    throw new ArgumentException($"{middlewaretype.Name} must be implementing { typeof(IControlLoopMiddleware).Name}.");
                }
                var conArgs = new object[args.Length + 1];
                conArgs[0]  = point;
                Array.Copy(args, 0, conArgs, 1, args.Length);
                var middleware = ActivatorUtilities.CreateInstance(builder.ApplicationServices, middlewaretype, conArgs) as IControlLoopMiddleware
                                 ?? throw new Exception(); //Todo: Change Exception to a more meaningful exception.
                return(middleware.InvokeAsync);
            });
            return(builder);
        }
예제 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="TMiddelware"></typeparam>
        /// <param name="builder"></param>
        /// <param name="args"></param>
        /// <returns></returns>
        public static IControlLoopBuilder Use <TMiddelware>(this IControlLoopBuilder builder, params object[] args) where TMiddelware : IControlLoopMiddleware
        {
            if (builder is null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.Use(typeof(TMiddelware), args);
            return(builder);
        }
예제 #3
0
        public static IControlLoopBuilder Invoke(this IControlLoopBuilder builder, Func <IDroneServerContext, ControlPoint, Task> middleware)
        {
            if (builder is null)
            {
                throw new ArgumentNullException(nameof(builder));
            }
            if (middleware is null)
            {
                throw new ArgumentNullException(nameof(middleware));
            }

            builder.Use <InlineMiddleware>(builder.ApplicationServices.GetRequiredService <IDroneServerContext>(), middleware);
            return(builder);
        }