private async Task ExecuteMiddlewareAsync(CommandContext context, OnLog onLog = null, bool addFilter = false)
        {
            var services = new ServiceCollection()
                           .AddLogging(logging =>
            {
                if (onLog.HasContent())
                {
                    logging.AddProvider(new TestLoggerProvider(onLog));
                }
            })
                           .AddSingleton <IFilterProvider, FilterProvider>();

            if (addFilter)
            {
                services.AddFilterFactory <ExceptionFilterFactory, ICommandExceptionFilter, CommandExceptionDelegate>();
                services.AddSingleton <SingletonDependency>();
                services.AddOptions <MariCommandsOptions>();
                services.Configure <MariCommandsOptions>(options =>
                {
                    options.Filters.Add(typeof(TestExceptionFilter));
                });
            }

            var provider = services.BuildServiceProvider(true);

            context.ServiceScopeFactory = provider.GetRequiredService <IServiceScopeFactory>();

            var app = new CommandApplicationBuilder(new Dictionary <string, object>(), provider);

            app.UseDefaultExceptionMiddleware();

            var commandDelegate = app.Build();

            await commandDelegate(context);
        }