0 Tage Serie
csharp / expert
Snippet

Erstellung einer benutzerdefinierten Middleware-Pipeline-Logik

Framework-ähnliche Architekturen basieren oft auf dem Chain of Responsibility Muster. Dieses Snippet zeigt, wie man eine Middleware-Pipeline manuell mittels Funktionen höherer Ordnung aufbaut. Jeder 'Use'-Aufruf kapselt die nächste Komponente, was Vor- und Nachbereitungslogik ohne externe Bibliotheken ermöglicht.

snippet.cs
csharp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public delegate Task RequestDelegate(string context);
public class PipelineBuilder
{
private readonly List<Func<RequestDelegate, RequestDelegate>> _components = new();
public void Use(Func<RequestDelegate, RequestDelegate> middleware)
{
_components.Add(middleware);
}
public RequestDelegate Build()
{
RequestDelegate app = (context) => Task.CompletedTask;
for (int i = _components.Count - 1; i >= 0; i--)
{
app = _components[i](app);
}
return app;
}
}
Erklärung
1
public delegate Task RequestDelegate(string context)
Die Kernabstraktion, die eine asynchrone Operation in der Pipeline darstellt.
2
app = _components[i](app)
Kapselt Delegates rekursiv, um eine verschachtelte Ausführungskette zu erstellen (funktionale Komposition).