public async Task FiltersDefinitionWasChanged_Should_Rebuild_Delegates()
        {
            // Act
            var services = new ServiceCollection();

            services.AddOptions <MariCommandsOptions>();

            services.Configure <MariCommandsOptions>(options =>
            {
                options.Filters.Add(typeof(TestExceptionFilter));
            });

            services.AddSingleton <SingletonDependency>();
            services.AddSingleton <ExceptionFilterFactory>();

            var provider     = services.BuildServiceProvider(true);
            var scopeFactory = provider.GetRequiredService <IServiceScopeFactory>();

            var exceptionFilterFactory = provider.GetRequiredService <ExceptionFilterFactory>();

            await using var context = new CommandContext
                        {
                            ServiceScopeFactory = scopeFactory,
                        };

            var edi = ExceptionDispatchInfo.Capture(new Exception());

            var exceptionContext = new CommandExceptionContext(context, edi);

            var singletonDependency = provider.GetRequiredService <SingletonDependency>();

            // Arrange + Assert
            var exceptionDelegate = exceptionFilterFactory.GetFiltersDelegate();

            Assert.NotNull(exceptionDelegate);

            await exceptionDelegate(exceptionContext);

            Assert.True(singletonDependency.Invoked);

            singletonDependency.Invoked = false;

            var filters = Array.Empty <ICommandFilter>();

            exceptionFilterFactory.FiltersDefinitionWasChanged(filters);

            exceptionDelegate = exceptionFilterFactory.GetFiltersDelegate();

            await exceptionDelegate(exceptionContext);

            Assert.False(singletonDependency.Invoked);
        }
Ejemplo n.º 2
0
        public async Task InvokeFiltersAsync_Should_Invoke_ExceptionFilterFactory_Builded_Delegate()
        {
            // Act
            var services = new ServiceCollection();

            services.AddOptions <MariCommandsOptions>();

            services.Configure <MariCommandsOptions>(options =>
            {
                options.Filters.Add(typeof(TestExceptionFilter));
            });

            services.AddFilterFactory <ExceptionFilterFactory, ICommandExceptionFilter, CommandExceptionDelegate>();
            services.AddSingleton <SingletonDependency>();
            services.AddSingleton <FilterProvider>();

            var provider     = services.BuildServiceProvider(true);
            var scopeFactory = provider.GetRequiredService <IServiceScopeFactory>();

            var filterProvider = provider.GetRequiredService <FilterProvider>();

            await using var context = new CommandContext
                        {
                            ServiceScopeFactory = scopeFactory,
                        };

            var edi = ExceptionDispatchInfo.Capture(new Exception());
            var exceptionContext = new CommandExceptionContext(context, edi);

            var singletonDependency = provider.GetRequiredService <SingletonDependency>();

            // Arrange + Assert
            await filterProvider.InvokeFiltersAsync <CommandExceptionContext, ICommandExceptionFilter>(exceptionContext);

            Assert.True(singletonDependency.Invoked);
        }
Ejemplo n.º 3
0
            public Task InvokeAsync(CommandExceptionContext context, CommandExceptionDelegate next)
            {
                _singletonDependency.Invoked = true;

                return(next(context));
            }