public AgsTokenMiddleware(RequestDelegate next, IOptions <AgsOptions> options, IMemoryCache memoryCache)
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            _next        = next ?? throw new ArgumentNullException(nameof(next));
            _memoryCache = memoryCache;
            _options     = options.Value;
        }
        /// <summary>
        /// Add AGS token to request as specified in options
        /// </summary>
        /// <param name="app"></param>
        /// <param name="options">Options for setting port, host, instance, username and password</param>
        /// <returns></returns>
        public static IApplicationBuilder UseAgsToken(this IApplicationBuilder app, AgsOptions options)
        {
            if (app == null)
            {
                throw new ArgumentNullException(nameof(app));
            }
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            return(app.UseMiddleware <AgsTokenMiddleware>(Options.Create(options)));
        }