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); }