public void Use_Invalid_Handler_Type()
        {
            var builder = new ExceptionHandlerBuilder(new ServiceCollection().BuildServiceProvider());

            Assert.Throws <ArgumentException>(() => builder.Use(typeof(InvalidHandler)));
            Assert.Throws <ArgumentException>(() => builder.Use <InvalidHandler>());
        }
        private void BuildErrorHandler()
        {
            errorLog = new ErrorLog(new DefaultLogFormatter());
            ILogFactory logFactory = new DefaultLogFactory()
                                     .AddSerializer(errorLog)
#if DEBUG
                                     .AddConsole()
#endif
            ;

            log = logFactory.Scope("Root");

            ExceptionHandlerBuilder builder = new ExceptionHandlerBuilder();

            builder
            .Filter <UnauthorizedAccessException>()
            .Handler(new UnauthorizedAccessExceptionHandler(Settings.Default, this, () => { mainWindow?.Close(); mainFactory.ClearService(); }));

            builder
            .Filter(e => !(e is UnauthorizedAccessException))
            .Handler(new LogExceptionHandler(log))
            .Handler(new MessageBoxExceptionHandler(this));

            exceptionHandler = builder;
        }
示例#3
0
        public void BuilderWithFilter()
        {
            ContextExceptionHandler <Exception>         handler1 = new ContextExceptionHandler <Exception>(false);
            ContextExceptionHandler <Exception>         handler2 = new ContextExceptionHandler <Exception>(false);
            ContextExceptionHandler <Exception>         handler3 = new ContextExceptionHandler <Exception>(false);
            ContextExceptionHandler <Exception>         handler4 = new ContextExceptionHandler <Exception>(false);
            ContextExceptionHandler <ArgumentException> handler5 = new ContextExceptionHandler <ArgumentException>(true);
            ContextExceptionHandler <ArgumentException> handler6 = new ContextExceptionHandler <ArgumentException>(false);

            ExceptionHandlerBuilder builder = new ExceptionHandlerBuilder();

            builder
            .Handler(handler1)
            .Handler(handler2)
            .Filter <Exception>()
            .Handler(handler3)
            .Handler(handler4)
            .Filter <ArgumentException>()
            .Handler(handler5)
            .Handler(handler6);

            IExceptionHandler handler = builder;

            handler.Handle(new Exception());
            handler.Handle(new ArgumentException());

            Assert.AreEqual(2, handler1.Count);
            Assert.AreEqual(2, handler2.Count);
            Assert.AreEqual(2, handler3.Count);
            Assert.AreEqual(2, handler4.Count);
            Assert.AreEqual(1, handler5.Count);
            Assert.AreEqual(0, handler6.Count);
        }
示例#4
0
        private void InitializeErrorHandler()
        {
            executorFactory = new FileLogBatchFactory(TimeSpan.FromSeconds(30));

            logService = new IsolatedLogService();

            logFactory = new DefaultLogFactory()
                         .AddSerializer(AddDisposable(new FileLogSerializer(new DefaultLogFormatter(), () => settings.LogLevel, executorFactory)))
                         .AddSerializer(AddDisposable(new ErrorLogSerializer(new DefaultLogFormatter(), executorFactory)))
#if DEBUG
                         .AddConsole()
#endif
            ;

            ILog rootLog = logFactory.Scope("Root");

            ExceptionHandlerBuilder builder = new ExceptionHandlerBuilder();
            builder
            .Filter <UnauthorizedAccessException>()
            .Handler(new UnauthorizedAccessExceptionHandler(settings, this, () => { mainWindow?.Close(); mainFactory.ClearService(); }));

            builder
            .Filter(e => !(e is UnauthorizedAccessException))
            .Handler(new LogExceptionHandler(rootLog))
            .Handler(new MessageBoxExceptionHandler(this));

            exceptionHandler = builder;
        }
        public void Rethrow()
        {
            IExceptionHandler handler = new ExceptionHandlerBuilder()
                                        .Handler(new ReThrowExceptionHandler());

            string message1 = null;
            string message2 = null;

            try
            {
                try
                {
                    Level1();
                }
                catch (Exception e1)
                {
                    message1 = e1.ToString();
                    Assert.IsTrue(message1.Contains("Level3"));
                    handler.Handle(e1);
                }
            }
            catch (Exception e2)
            {
                message2 = e2.ToString();
                Assert.IsTrue(message1.Contains("Level3"));
                Assert.IsTrue(message2.StartsWith(message1));
            }
        }
        public async void Use()
        {
            var serviceProvider = new ServiceCollection()
                                  .AddScoped <IFoo, Foo>()
                                  .AddScoped <IBaz, Baz>()
                                  .BuildServiceProvider();

            var handler = new ExceptionHandlerBuilder(serviceProvider)
                          .Use(typeof(ValidHandler), new Bar())
                          .Build();

            await handler(new ExceptionContext(new Exception()));

            Assert.NotNull(_foo);
            Assert.NotNull(_bar);
            Assert.NotNull(_baz);

            _foo = null;
            _bar = null;
            _baz = null;

            handler = new ExceptionHandlerBuilder(serviceProvider)
                      .Use <ValidHandler>(new Bar())
                      .Build();
            await handler(new ExceptionContext(new Exception()));

            Assert.NotNull(_foo);
            Assert.NotNull(_bar);
            Assert.NotNull(_baz);
        }
示例#7
0
        protected override void OnInitialized()
        {
            Log.Debug("Initialize VersionSupport");

            base.OnInitialized();

            ExceptionHandlerBuilder.Handler <NotSupportedApiVersionException>(this);
            ClientVersion = typeof(VersionChecker).Assembly.GetName().Version;
            NewIssueTitle = $"Client '{Converts.To<Version, string>(ClientVersion)}' is too old";
        }
示例#8
0
        public static IServiceCollection AddExceptions(this IServiceCollection services)
        {
            Ensure.NotNull(services, "services");

            ExceptionHandlerBuilder handlerBuilder = new ExceptionHandlerBuilder();

            return(services
                   .AddSingleton(handlerBuilder)
                   .AddSingleton <IExceptionHandler>(handlerBuilder)
                   .AddTransient <TaskFaultHandler>());
        }
示例#9
0
        public ServerConnectionState(NetworkState network, IApiHubState hub, ExceptionHandlerBuilder exceptionHandlers, ILogFactory logFactory)
        {
            Ensure.NotNull(network, "network");
            Ensure.NotNull(hub, "hub");
            Ensure.NotNull(exceptionHandlers, "exceptionHandlers");
            Ensure.NotNull(logFactory, "logFactory");
            this.network = network;
            this.hub     = hub;
            this.log     = logFactory.Scope("ServerConnectionState");

            network.StatusChanged += OnNetworkChanged;
            hub.Changed           += OnServerStateChanged;
            exceptionHandlers.Handler <ServerNotRespondingException>(OnServerNotRespondingException);
        }
        public void Ignore()
        {
            ExceptionHandlerBuilder  builder = new ExceptionHandlerBuilder();
            ArgumentExceptionHandler handler = new ArgumentExceptionHandler();

            builder.Ignore();
            builder.Handler(handler);

            IExceptionHandlerCollection collection = new DefaultExceptionHandlerCollection()
                                                     .Add(builder);

            collection.Handle(new ArgumentException("X"));
            Assert.AreEqual(0, handler.CallCount);
        }
示例#11
0
        public async void Use_And_Build()
        {
            var builder = new ExceptionHandlerBuilder(new ServiceCollection().BuildServiceProvider());

            builder.Use(_ => { _flag = ""; return(Task.CompletedTask); });
            builder.Use(_ => { _flag += "1"; return(Task.CompletedTask); });
            builder.Use(_ => { _flag += "2"; return(Task.CompletedTask); });
            builder.Use(_ => { _.Properties.Add("flag", _flag); return(Task.CompletedTask); });
            var handler = builder.Build();
            var context = new ExceptionContext(new Exception());

            await handler(context);

            Assert.Equal("12", context.Properties["flag"]);
        }
示例#12
0
        public void Builder()
        {
            ContextExceptionHandler <Exception> handler1 = new ContextExceptionHandler <Exception>(false);
            ContextExceptionHandler <Exception> handler2 = new ContextExceptionHandler <Exception>(true);
            ContextExceptionHandler <Exception> handler3 = new ContextExceptionHandler <Exception>(false);

            IExceptionHandler handler = new ExceptionHandlerBuilder()
                                        .Handler(handler1)
                                        .Handler(handler2)
                                        .Handler(handler3);

            handler.Handle(new Exception());

            Assert.AreEqual(1, handler1.Count);
            Assert.AreEqual(1, handler2.Count);
            Assert.AreEqual(0, handler3.Count);
        }
示例#13
0
        private void BuildExceptionHandler()
        {
            var exceptionBuilder = new ExceptionHandlerBuilder();

            exceptionBuilder
            .Handler(new LogExceptionHandler(LogFactory.Scope("Exception")));

            var unauthorized = new UnauthorizedExceptionHandler(ProcessService);

            exceptionBuilder
            .Filter <UnauthorizedAccessException>()
            .Handler(unauthorized);

            exceptionBuilder
            .Filter <PackagesConfigWriterException>()
            .Filter(e => e.InnerException is FileNotFoundException)
            .Handler(unauthorized);

            exceptionBuilder
            .Filter <NuGetConfigurationException>()
            .Filter(e => e.InnerException is UnauthorizedAccessException)
            .Handler(unauthorized);

            exceptionBuilder
            .Filter <FatalProtocolException>()
            .Handler(new NuGetFatalProtocolExceptionHandler(Navigator));

            var packageContent = new PackageInstallExceptionHandler(Navigator);

            exceptionBuilder
            .Handler <PackageFileExtractionException>(packageContent)
            .Handler <PackageFileRemovalException>(packageContent);

            exceptionBuilder
            .Handler(new RestartAsAdministratorCancelledExceptionHandler(Navigator, this));

            exceptionBuilder
            .Handler(new MessageExceptionHandler(Navigator))
            .Handler(new ShutdownExceptionHandler(this));

            ExceptionHandler = exceptionBuilder;
        }
示例#14
0
        public void Base()
        {
            ExceptionHandlerBuilder builder = new ExceptionHandlerBuilder();

            ArgumentExceptionHandler    handler1 = new ArgumentExceptionHandler();
            InnerExceptionIsNullHandler handler2 = new InnerExceptionIsNullHandler();
            MessageLongerThanTenHandler handler3 = new MessageLongerThanTenHandler();
            MessageLongerThanTenHandler handler4 = new MessageLongerThanTenHandler();

            builder
            .Handler(handler1);

            builder
            .Filter(a => a.InnerException == null)
            .Handler(handler2)
            .Filter(a => a.Message.Length > 10)
            .Handler(handler3);

            builder
            .Filter(a => a.Message.Length > 10)
            .Handler(handler4);

            IExceptionHandlerCollection collection = new DefaultExceptionHandlerCollection()
                                                     .Add(builder);

            collection.Handle(new Exception("<= 10ch"));
            collection.Handle(new Exception("Long message > 10ch", new Exception()));
            collection.Handle(new Exception("===== 10ch"));

            collection.Handle(new ArgumentException("<= 10ch"));
            collection.Handle(new ArgumentException("Long message > 10ch"));
            collection.Handle(new ArgumentException("===== 10ch", new Exception()));

            Assert.AreEqual(3, handler1.CallCount);
            Assert.AreEqual(4, handler2.CallCount);
            Assert.AreEqual(1, handler3.CallCount);
            Assert.AreEqual(2, handler4.CallCount);
        }
示例#15
0
        public void Initialize()
        {
            logFactory = new DefaultLogFactory("Root").AddSerializer(new ConsoleSerializer());
            errorLog   = logFactory.Scope("Error");

            readModelContextFactory     = Factory.Getter(() => new ReadModelContext(connectionStrings.ReadModel));
            eventSourcingContextFactory = Factory.Getter(() => new EventSourcingContext(connectionStrings.EventSourcing));
            CreateReadModelContext();
            CreateEventSourcingContext();

            exceptionHandlerBuilder = new ExceptionHandlerBuilder();

            services
            .AddSingleton(readModelContextFactory)
            .AddSingleton(eventSourcingContextFactory)
            .AddSingleton(exceptionHandlerBuilder)
            .AddSingleton <IExceptionHandler>(exceptionHandlerBuilder);

            Domain();

            priceCalculator = new PriceCalculator(eventDispatcher.Handlers, queryDispatcher);

            services
            .AddSingleton(priceCalculator)
            .AddSingleton(new FormatterContainer(commandFormatter, eventFormatter, queryFormatter, exceptionFormatter));

            ReadModels();

            services
            .AddSingleton <IEventHandlerCollection>(eventDispatcher.Handlers)
            .AddScoped <ICommandDispatcher>(provider => new UserCommandDispatcher(commandDispatcher, provider.GetService <IHttpContextAccessor>().HttpContext, provider.GetService <ApiHub>()))
            .AddScoped <IQueryDispatcher>(provider => new UserQueryDispatcher(queryDispatcher, provider.GetService <IHttpContextAccessor>().HttpContext));

            CurrencyCache currencyCache = new CurrencyCache(eventDispatcher.Handlers, queryDispatcher, queryDispatcher);

            services
            .AddSingleton(currencyCache);
        }
示例#16
0
        public void Initialize()
        {
            Logging();

            exceptionHandlerBuilder = new ExceptionHandlerBuilder();
            exceptionHandlerBuilder.Handler(Handle);

            services
            .AddDbContextWithSchema <ReadModelContext>(connectionStrings.GetSection("ReadModel"), pathResolver)
            .AddDbContextWithSchema <EventSourcingContext>(connectionStrings.GetSection("EventSourcing"), pathResolver)
            .AddSingleton(exceptionHandlerBuilder)
            .AddSingleton <IExceptionHandler>(exceptionHandlerBuilder);

            var provider = services.BuildServiceProvider();

            Domain(provider);

            priceCalculator = new PriceCalculator(eventDispatcher.Handlers, queryDispatcher);

            services
            .AddSingleton(priceCalculator)
            .AddSingleton(new FormatterContainer(commandFormatter, eventFormatter, queryFormatter, exceptionFormatter));

            CreateReadModelContext(provider);
            CreateEventSourcingContext(provider);
            ReadModels(provider);

            services
            .AddSingleton <IEventHandlerCollection>(eventDispatcher.Handlers)
            .AddScoped <ICommandDispatcher>(provider => new UserCommandDispatcher(commandDispatcher, provider.GetService <IHttpContextAccessor>().HttpContext, provider.GetService <ApiHub>()))
            .AddScoped <IQueryDispatcher>(provider => new UserQueryDispatcher(queryDispatcher, provider.GetService <IHttpContextAccessor>().HttpContext));

            CurrencyCache currencyCache = new CurrencyCache(eventDispatcher.Handlers, queryDispatcher, queryDispatcher);

            services
            .AddSingleton(currencyCache);
        }
示例#17
0
 public ApiHub(IEventHandlerCollection eventHandlers, FormatterContainer formatters, ExceptionHandlerBuilder exceptionHandlerBuilder)
 {
     Ensure.NotNull(eventHandlers, "eventHandlers");
     Ensure.NotNull(formatters, "formatters");
     this.formatters = formatters;
     eventHandlers.AddAll(this);
     exceptionHandlerBuilder.Filter <AggregateRootException>().Handler(this);
 }
示例#18
0
 protected override Task OnInitializedAsync()
 {
     ExceptionHandlerBuilder.Handler(this);
     FreeLimitsNotifier.OnShow += OnFreeLimitsNotifierShow;
     return(base.OnInitializedAsync());
 }