Skip to content

Commit 8af868d

Browse files
committed
add SignumInitializeFilterAttribute
1 parent b0e49b3 commit 8af868d

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

Signum.React/Facades/SignumServer.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public static MvcNewtonsoftJsonOptions AddSignumJsonConverters(this MvcNewtonsof
5252

5353
public static MvcOptions AddSignumGlobalFilters(this MvcOptions options)
5454
{
55+
options.Filters.Add(new SignumInitializeFilterAttribute());
5556
options.Filters.Add(new SignumExceptionFilterAttribute());
5657
options.Filters.Add(new CleanThreadContextAndAssertFilter());
5758
options.Filters.Add(new SignumEnableBufferingFilter());

Signum.React/Filters/SignumExceptionFilterAttribute.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,4 +154,28 @@ public HttpError(Exception e, bool includeErrorDetails = true)
154154
public string? StackTrace;
155155
public HttpError? InnerException;
156156
}
157+
158+
public class SignumInitializeFilterAttribute : IAsyncResourceFilter
159+
{
160+
public static Action InitializeDatabase = () => throw new InvalidOperationException("SignumInitializeFilterAttribute.InitializeDatabase should be set in Startup");
161+
static object lockKey = new object();
162+
public bool Initialized = false;
163+
164+
public Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next)
165+
{
166+
if (!Initialized)
167+
{
168+
lock (lockKey)
169+
{
170+
if (!Initialized)
171+
{
172+
InitializeDatabase();
173+
Initialized = true;
174+
}
175+
}
176+
}
177+
178+
return next();
179+
}
180+
}
157181
}

0 commit comments

Comments
 (0)