Was ist MediatR und wozu wird es benötigt?
\n\nMediatR ist eine leichte, aber leistungsstarke Bibliothek für .NET, die das Mediator-Entwurfsmuster implementiert. In der Softwareentwicklung, insbesondere in Anwendungen, die auf der CQRS-Architektur (Command Query Responsibility Segregation – Trennung von Befehlen und Abfragen) basieren, ist MediatR zum De-facto-Standard geworden.
\n\nWozu wird es benötigt?
\nIn einer klassischen Architektur, wenn eine Klasse (z. B. ein Controller) eine Aktion in einer anderen Klasse (z. B. einem Service) ausführen möchte, muss sie von der Existenz dieses Services und seiner Schnittstelle wissen. Dies erzeugt eine starke Kopplung (tight coupling). Wenn Sie vor dem Aufruf des Services eine Protokollierung, Validierung oder Zwischenspeicherung hinzufügen möchten, müssten Sie den Code des Controllers ändern oder Decorators erstellen, was die Wartung erschwert.
\n\nMediatR löst dieses Problem, indem es das Konzept eines Vermittlers einführt. Die Komponenten des Systems (z. B. Controller) kommunizieren nicht mehr direkt miteinander. Stattdessen senden sie Anfragen (Request) oder Befehle (Command) über MediatR. Die Bibliothek findet und ruft automatisch den entsprechenden Handler auf.
\n\nWichtige Vorteile der Verwendung von MediatR:
\n- \n
- Lockere Kopplung (Loose Coupling): Der Absender der Anfrage weiß nichts über den Empfänger. Er kennt nur den Typ der Anfrage. \n
- Prinzip der Einzelverantwortung (SRP): Jeder Handler ist nur für eine einzige Aktion verantwortlich (z. B. "Benutzer erstellen", "Bestellliste abrufen"). \n
- Vereinfachung von CQRS: MediatR eignet sich ideal zur Trennung von Befehlen (die den Zustand ändern) und Abfragen (die den Zustand lesen). \n
- Verhaltensketten (Pipeline Behaviors): Sie können problemlos übergreifende Funktionalitäten (Protokollierung, Validierung, Transaktionen) hinzufügen, ohne den Code der Handler zu ändern. \n
- Testbarkeit: Handler lassen sich leicht isoliert testen, und ihre Implementierung kann einfach ausgetauscht werden. \n
Installation von MediatR
\nMediatR wird über NuGet verteilt. Sie können es auf verschiedene Arten installieren:
\n\n1. Über die .NET CLI (empfohlene Methode)
\nÖffnen Sie ein Terminal im Stammverzeichnis Ihres Projekts und führen Sie den folgenden Befehl aus:
\ndotnet add package MediatR\nAußerdem benötigen Sie ein Paket für die Abhängigkeitsinjektion (DI), wenn Sie ASP.NET Core verwenden:
\ndotnet add package MediatR.Extensions.Microsoft.DependencyInjection\n\n2. Über die Package Manager Console (Visual Studio)
\nInstall-Package MediatR\nInstall-Package MediatR.Extensions.Microsoft.DependencyInjection\n\n3. Über die NuGet Package Manager UI
\nIn Visual Studio: Tools → NuGet Package Manager → Manage NuGet Packages for Solution.... Suchen Sie nach "MediatR" und installieren Sie beide Pakete.
\n\nSchnellstart mit einem Codebeispiel
\nLassen Sie uns ein einfaches Beispiel erstellen: das Senden einer Begrüßung an einen Benutzer.
\n\nSchritt 1: Erstellen Sie ein Projekt
\nErstellen Sie ein neues Konsolenprojekt oder ein ASP.NET Core Web API-Projekt.
\n\nSchritt 2: Definieren Sie eine Anfrage (Request)
\nErstellen Sie eine Klasse, die die Anfrage darstellt. Sie muss das Interface IRequest<TResponse> implementieren, wobei TResponse der Rückgabetyp ist.
using MediatR;\n\npublic class PingRequest : IRequest<string>\n{\n public string Message { get; set; } = "Ping";\n}\n\nSchritt 3: Erstellen Sie einen Handler
\nErstellen Sie eine Klasse, die das Interface IRequestHandler<TRequest, TResponse> implementiert.
using MediatR;\nusing System.Threading;\nusing System.Threading.Tasks;\n\npublic class PingHandler : IRequestHandler<PingRequest, string>\n{\n public Task<string