private static ExceptionManager Build()
 {
     return(ExceptionManagerBuilder
            .Configure()
            .WithExceptionPolicyDefinition(GetDefinition())
            .Build());
 }
            public void Configure_Creates_A_New_Instance_Of_ExceptionManagerBuilder()
            {
                var result = ExceptionManagerBuilder.Configure();

                Assert.IsNotNull(result);
                Assert.IsInstanceOfType(result, typeof(ExceptionManagerBuilder));
            }
            public void WithExceptionHandler_Returns_Same_ExceptionManagerBuilder()
            {
                var exceptionManagerBuilder = ExceptionManagerBuilder.Configure();

                Assert.AreSame(
                    exceptionManagerBuilder,
                    exceptionManagerBuilder.WithExceptionPolicyDefinition(GetDefinition()));
            }
            public void WithExceptionPolicyDefinition_Returns_An_Instance_Of_ExceptionManagerBuilder()
            {
                var result = ExceptionManagerBuilder.
                             Configure()
                             .WithExceptionPolicyDefinition(GetDefinition());

                Assert.IsNotNull(result);
                Assert.IsInstanceOfType(result, typeof(ExceptionManagerBuilder));
            }
Example #5
0
        public void Use_And_Get_Filter()
        {
            var builder = new ExceptionManagerBuilder(new ServiceCollection().AddScoped <IFoo, Foo>().BuildServiceProvider());

            builder.UseFilter("foobar", typeof(FoobarFiler), new Bar());
            FoobarFiler fitler = (FoobarFiler)builder.GetFilters()["foobar"];

            Assert.NotNull(fitler.Foo);
            Assert.NotNull(fitler.Bar);
        }
 /// <summary>
 /// Register the <see cref="ExceptionManager"/> based service with exception policies.
 /// </summary>
 /// <param name="services">The <see cref="IServiceCollection"/> to which the service is registered.</param>
 /// <param name="configure">A <see cref="Action{IExceptionManagerBuilder}"/> to set exception policy.</param>
 /// <returns>The current <see cref="IServiceCollection"/> with the <see cref="ExceptionManager"/> based service.</returns>
 /// <exception cref="ArgumentNullException">The <paramref name="services"/> is null.</exception>
 /// <exception cref="ArgumentNullException">The <paramref name="configure"/> is null.</exception>
 public static IServiceCollection AddExceptionHandling(this IServiceCollection services, Action <IExceptionManagerBuilder> configure)
 {
     Guard.ArgumentNotNull(services, nameof(services));
     Guard.ArgumentNotNull(configure, nameof(configure));
     return(services.AddSingleton <ExceptionManager>(serviceProvider =>
     {
         ExceptionManagerBuilder builder = new ExceptionManagerBuilder(serviceProvider);
         configure(builder);
         return builder.Build();
     }));
 }
        public async void InvokeAsync()
        {
            var manager = new ExceptionManagerBuilder(new ServiceCollection().BuildServiceProvider())
                          .AddPolicy("policy1", policies => policies.Configure(handlers => handlers.Use(_ => Task.Run(() => _flag = "policy1"))))
                          .AddPolicy("policy2", policies => policies.Configure(handlers => handlers.Use(_ => Task.Run(() => _flag = "policy2"))))
                          .SetDefaultPolicy("policy1")
                          .Build();

            var interceptor = new ExceptionHandlingInterceptor(_ => Task.Run(() => throw new InvalidOperationException()), manager, "policy2");

            _flag = null;
            await Assert.ThrowsAsync <InvalidOperationException>(() => interceptor.InvokeAsync(new FakeInvocationContext()));

            Assert.Equal("policy2", _flag);

            interceptor = new ExceptionHandlingInterceptor(_ => Task.Run(() => throw new InvalidOperationException()), manager);
            _flag       = null;
            await Assert.ThrowsAsync <InvalidOperationException>(() => interceptor.InvokeAsync(new FakeInvocationContext()));

            Assert.Equal("policy1", _flag);
        }