From 8af868d10231629c8f045eb5b86f8431df427811 Mon Sep 17 00:00:00 2001 From: Olmo del Corral Cano Date: Tue, 8 Sep 2020 16:53:57 +0200 Subject: [PATCH] add SignumInitializeFilterAttribute --- Signum.React/Facades/SignumServer.cs | 1 + .../Filters/SignumExceptionFilterAttribute.cs | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/Signum.React/Facades/SignumServer.cs b/Signum.React/Facades/SignumServer.cs index 50afc0f975..784e3aeefe 100644 --- a/Signum.React/Facades/SignumServer.cs +++ b/Signum.React/Facades/SignumServer.cs @@ -52,6 +52,7 @@ public static MvcNewtonsoftJsonOptions AddSignumJsonConverters(this MvcNewtonsof public static MvcOptions AddSignumGlobalFilters(this MvcOptions options) { + options.Filters.Add(new SignumInitializeFilterAttribute()); options.Filters.Add(new SignumExceptionFilterAttribute()); options.Filters.Add(new CleanThreadContextAndAssertFilter()); options.Filters.Add(new SignumEnableBufferingFilter()); diff --git a/Signum.React/Filters/SignumExceptionFilterAttribute.cs b/Signum.React/Filters/SignumExceptionFilterAttribute.cs index fd8b5b9b71..3ce95fc729 100644 --- a/Signum.React/Filters/SignumExceptionFilterAttribute.cs +++ b/Signum.React/Filters/SignumExceptionFilterAttribute.cs @@ -154,4 +154,28 @@ public HttpError(Exception e, bool includeErrorDetails = true) public string? StackTrace; public HttpError? InnerException; } + + public class SignumInitializeFilterAttribute : IAsyncResourceFilter + { + public static Action InitializeDatabase = () => throw new InvalidOperationException("SignumInitializeFilterAttribute.InitializeDatabase should be set in Startup"); + static object lockKey = new object(); + public bool Initialized = false; + + public Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next) + { + if (!Initialized) + { + lock (lockKey) + { + if (!Initialized) + { + InitializeDatabase(); + Initialized = true; + } + } + } + + return next(); + } + } }