MediatR لـ C# (.NET): دليل شامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ما هو MediatR ولماذا هو مطلوب؟

\n\n

MediatR هي مكتبة خفيفة الوزن ولكنها قوية لـ .NET، تطبق نمط الوسيط (Mediator). في عالم تطوير البرمجيات، خاصة في التطبيقات المبنية على بنية CQRS (فصل مسؤولية الأوامر والاستعلامات)، أصبحت MediatR المعيار الفعلي.

\n\n

لماذا هو مطلوب؟

\n

في البنية الكلاسيكية، عندما تريد فئة (مثل وحدة التحكم) تنفيذ إجراء في فئة أخرى (مثل خدمة)، يجب أن تعرف بوجود هذه الخدمة وواجهتها. هذا يخلق اقترانًا محكمًا (tight coupling). إذا أردت إضافة تسجيل أو تحقق أو تخزين مؤقت قبل استدعاء الخدمة، فسيتعين عليك تغيير كود وحدة التحكم أو إنشاء ديكوراتورات، مما يعقد الصيانة.

\n\n

يحل MediatR هذه المشكلة من خلال تقديم مفهوم الوسيط. لم تعد مكونات النظام (مثل وحدات التحكم) تتواصل مباشرة. بدلاً من ذلك، ترسل طلبات (Request) أو أوامر (Command) عبر MediatR. المكتبة تجد وتستدعي المعالج (Handler) المناسب بنفسها.

\n\n

المزايا الرئيسية لاستخدام MediatR:

\n
    \n
  • اقتران ضعيف (Loose Coupling): مرسل الطلب لا يعرف شيئًا عن المستلم. يعرف فقط نوع الطلب.
  • \n
  • مبدأ المسؤولية الواحدة (SRP): كل معالج مسؤول عن إجراء واحد فقط (مثل "إنشاء مستخدم"، "الحصول على قائمة الطلبات").
  • \n
  • تبسيط CQRS: MediatR مثالي لفصل الأوامر (التي تغير الحالة) والاستعلامات (التي تقرأ الحالة).
  • \n
  • سلاسل السلوك (Pipeline Behaviors): يمكنك بسهولة إضافة وظائف شاملة (تسجيل، تحقق، معاملات) دون تغيير كود المعالجات.
  • \n
  • قابلية الاختبار: من السهل اختبار المعالجات بشكل منفصل، وكذلك استبدال تنفيذها بسهولة.
  • \n
\n\n

تثبيت MediatR

\n

يتم توزيع MediatR عبر NuGet. يمكن تثبيته بعدة طرق:

\n\n

1. عبر .NET CLI (الطريقة الموصى بها)

\n

افتح الطرفية في جذر مشروعك ونفذ الأمر:

\n
dotnet add package MediatR
\n

ستحتاج أيضًا إلى حزمة لحقن التبعيات (DI) إذا كنت تستخدم ASP.NET Core:

\n
dotnet add package MediatR.Extensions.Microsoft.DependencyInjection
\n\n

2. عبر Package Manager Console (Visual Studio)

\n
Install-Package MediatR\nInstall-Package MediatR.Extensions.Microsoft.DependencyInjection
\n\n

3. عبر واجهة NuGet Package Manager UI

\n

في Visual Studio: Tools → NuGet Package Manager → Manage NuGet Packages for Solution.... ابحث عن "MediatR" وقم بتثبيت كلتا الحزمتين.

\n\n

بداية سريعة مع مثال كود

\n

لنقم بإنشاء مثال بسيط: إرسال تحية لمستخدم.

\n\n

الخطوة 1: إنشاء مشروع

\n

أنشئ مشروعًا جديدًا لوحدة التحكم أو مشروع ASP.NET Core Web API.

\n\n

الخطوة 2: تعريف الطلب (Request)

\n

أنشئ فئة تمثل الطلب. يجب أن تنفذ الواجهة IRequest<TResponse>، حيث TResponse هو نوع القيمة المرتجعة.

\n
using MediatR;\n\npublic class PingRequest : IRequest<string>\n{\n    public string Message { get; set; } = "Ping";\n}
\n\n

الخطوة 3: إنشاء المعالج (Handler)

\n

أنشئ فئة تنفذ الواجهة IRequestHandler<TRequest, TResponse>.

\n
using MediatR;\nusing System.Threading;\nusing System.Threading.Tasks;\n\npublic class PingHandler : IRequestHandler<PingRequest, string>\n{\n    public Task<string                    

توصيات