فعالسازی میانافزار مبتنی بر کارخانه، رویکردی انعطافپذیرتر و پویاتر برای پیکربندی و فعالسازی اجزای میانافزار است. در اینجا نحوه استفاده از آن در ASP.NET Core 7 آمده است.
هنگام ساختن یک برنامه ASP.NET Core، میتوانید از اجزای میانافزار مختلف استفاده کنید تا پیامهای درخواست و پاسخ را که در خط لوله جریان مییابند، بررسی، مسیریابی یا تغییر دهید. همچنین میتوانید میانافزار دلخواه خود را بنویسید در ASP.NET Core.
معمولاً، شما زنجیره ای از اجزای میان افزار را در خط لوله برنامه در ASP.NET Core دارید. در این مقاله، میانافزار در ASP.NET Core و نحوه کار با رویکردهای قراردادی و کارخانهای را بررسی میکنیم.
برای استفاده از نمونه کدهای ارائه شده در این مقاله، باید Visual Studio 2022 را در سیستم خود نصب کنید. اگر قبلاً نسخهای ندارید، میتوانید Visual Studio 2022 را از اینجا بارگیری کنید.
یک پروژه ASP.NET Core 7 Web API در Visual Studio 2022 ایجاد کنید
ابتدا، اجازه دهید یک پروژه ASP.NET Core 7 در Visual Studio 2022 ایجاد کنیم. این مراحل را دنبال کنید:
- Visual Studio 2022 IDE را راه اندازی کنید.
- روی “ایجاد پروژه جدید” کلیک کنید.
- در پنجره “ایجاد پروژه جدید”، “ASP.NET Core Web API” را از لیست الگوهای نمایش داده شده انتخاب کنید.
- بعدی را کلیک کنید.
- در پنجره “پیکربندی پروژه جدید خود”، نام و مکان پروژه جدید را مشخص کنید.
- به صورت اختیاری، بسته به تنظیمات برگزیده خود، کادر انتخاب «قرار دادن راه حل و پروژه در یک فهرست راهنمای» را علامت بزنید.
- بعدی را کلیک کنید.
- در پنجره «اطلاعات اضافی» که در ادامه نشان داده شده است، کادر «استفاده از کنترلکنندهها (برای استفاده از حداقل APIها علامت آن را بردارید» را علامت بزنید. ما در این پروژه از حداقل API استفاده نخواهیم کرد. تنظیم «نوع احراز هویت» را روی «هیچ» (پیشفرض) بگذارید.
- مطمئن شوید که چک باکسهای «فعال کردن پشتیبانی از API باز کردن»، «پیکربندی برای HTTPS» و «فعال کردن داکر» علامت نخورده باقی میمانند زیرا ما از این ویژگیها در اینجا استفاده نمیکنیم.
- روی ایجاد کلیک کنید.
ما از این پروژه ASP.NET Core 7 Web API برای کار با فعالسازی میانافزار مبتنی بر کارخانه در بخشهای زیر استفاده خواهیم کرد.
آشنایی میان افزار در ASP.NET Core
Middleware اجزای نرم افزاری هستند که خط لوله پردازش درخواست/پاسخ را در ASP.NET Core تشکیل می دهند. درخواستهای ورودی از طریق هر جزء میانافزار در خط لوله جریان مییابند، و هر یک از آن مؤلفهها میتوانند درخواست را پردازش کرده یا به مؤلفه بعدی در خط لوله ارسال کنند.
کارهای زیادی وجود دارد که میانافزار میتواند انجام دهد، از جمله احراز هویت، مجوز، ثبتنام، مدیریت استثنا، مسیریابی، ذخیرهسازی حافظه پنهان و فشردهسازی پاسخ. میتوانید عملکرد برنامه خود را به اجزای جداگانه مدولار کنید و میانافزار را اضافه، حذف یا تنظیم مجدد کنید تا خط لوله پردازش درخواست و پاسخ را با برنامه خود تنظیم کنید.
به طور سنتی، هنگام استفاده از نسخه جدیدتر ASP.NET Core، باید اجزای میان افزار خود را با استفاده از روش پسوند UseMiddleware در کلاس Startup یا فایل Program.cs پیکربندی کنید. در مقابل، فعالسازی میانافزار مبتنی بر کارخانه به شما امکان میدهد اجزای میانافزار را با استفاده از کارخانهها تعریف و پیکربندی کنید، که انعطافپذیری بیشتری در فعالسازی فراهم میکند.
توجه داشته باشید که اگر کلاس کارخانه میانافزار سفارشی خود را ننویسید، کارخانه میانافزار پیشفرض استفاده خواهد شد. در ASP.NET Core، میتوانید میانافزار خود را به دو روش مختلف فعال کنید: فعالسازی میانافزار مبتنی بر قرارداد و فعالسازی میانافزار مبتنی بر کارخانه. بیایید اکنون هر دو رویکرد را بررسی کنیم.
میان افزار مبتنی بر کنوانسیون در هسته ASP.NET
فعالسازی میانافزار مبتنی بر کنوانسیون در ASP.NET Core یک ویژگی است که به شما امکان میدهد بهجای پیکربندی صریح هر جزء میانافزار، بهطور خودکار میانافزار را بر اساس قراردادهای از پیش تعریفشده در خط لوله درخواست/پاسخ اعمال کنید. فهرست کد زیر نشان می دهد که چگونه می توانید یک جزء میان افزار مبتنی بر قرارداد ایجاد کنید.
public class ConventionalMiddleware { private readonly RequestDelegate _next; public ConventionalMiddleware(RequestDelegate next) => _next = next; public async Task InvokeAsync(HttpContext context) { Trace.WriteLine("Inside the Conventional Middleware."); await _next(context); } }
می توانید این میان افزار را با استفاده از کد زیر در فایل Program.cs به خط لوله پردازش درخواست اضافه کنید.
var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.UseMiddleware<ConventionalMiddleware>(); app.Run();
میان افزار مبتنی بر کارخانه در هسته ASP.NET
فعالسازی میانافزار مبتنی بر کارخانه در ASP.NET Core روشی انعطافپذیرتر و پویاتر برای پیکربندی و فعالسازی اجزای میانافزار ارائه میدهد. با فعالسازی میانافزار مبتنی بر کارخانه، میتوانید فرآیند نمونهسازی میانافزار را بر اساس نیازهای برنامه خود سفارشی کنید.
میانافزار مبتنی بر کارخانه به شما امکان میدهد وابستگیهایی را با طول عمر محدودهای با استفاده از سازنده کلاس میانافزار خود تزریق کنید – یک ویژگی که توسط میانافزار مبتنی بر قرارداد پشتیبانی نمیشود. طول عمر محدوده به این معنی است که سرویس یک بار در هر درخواست مشتری ایجاد می شود و در پایان درخواست حذف می شود.
میان افزارهای مبتنی بر کارخانه دارای مزایای زیر نسبت به میان افزارهای سنتی یا مبتنی بر قرارداد هستند:
- در حالی که هنگام راهاندازی برنامه هستهای ASP.NET یکبار میانافزار مبتنی بر قرارداد ایجاد میشود، میانافزار مبتنی بر کارخانه با هر درخواست ایجاد میشود.
- از آنجایی که میانافزار مبتنی بر کارخانه پشتیبانی فعالسازی هر درخواست را فراهم میکند، میتوانید خدمات محدودهای را به سازنده میانافزار تزریق کنید.
- میان افزار مبتنی بر کارخانه، تایپ قوی از نوع میان افزار را ترویج می کند.
برای استفاده از فعالسازی میانافزار مبتنی بر کارخانه، باید چهار مرحله ذکر شده در زیر را دنبال کنید.
- یک کلاس ایجاد کنید که مؤلفه میانافزار شما را نشان دهد و رابط IMiddleware را پیادهسازی کند.
- روش InvokeAsync را در میان افزار خود که منطق میان افزار را تعریف می کند، پیاده سازی کنید.
- با استفاده از روش AddSingleton یا AddScoped میان افزار را به ظرف DI اضافه کنید.
- با استفاده از روش پسوند UseMiddleware و تعیین نوع جزء میان افزار خود، خط لوله میان افزار را پیکربندی کنید.
لیست کد زیر نشان میدهد که چگونه میتوانید یک جزء میانافزار مبتنی بر کارخانه بنویسید.
public class FactoryActivatedMiddleware : IMiddleware { public async Task InvokeAsync(HttpContext context, RequestDelegate next) { Trace.WriteLine("Inside the Factory Activated Middleware."); await next.Invoke(context); } }
باید با استفاده از کد زیر، میان افزار را در ظرف خدمات ثبت کنید.
var builder = WebApplication.CreateBuilder(args); builder.Services.AddTransient<FactoryActivatedMiddleware>();
اکنون میتوانید این میانافزار را به همان روشی که در مثال میانافزار مبتنی بر قرارداد اضافه کردیم، اضافه کنید.
var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.UseMiddleware<FactoryActivatedMiddleware>(); app.Run();
هر فراخوانی به روش افزونه UseMiddleware بررسی میکند که آیا پیادهسازی میانافزار مورد نظر با رابط IMiddleware مطابقت دارد یا خیر. اگر این شرط برآورده شود، نمونه IMiddlewareFactory ثبت شده در کانتینر سرویس برای حل و فصل پیاده سازی رابط IMiddleware به جای اجرای میان افزار مبتنی بر قرارداد استفاده می شود. این میانافزار بهعنوان یک سرویس گذرا یا دامنهدار در ظرف سرویسها ثبت شده است.
اینترفیس IMiddlewareFactory دو روش را تعریف می کند، یعنی متدهای Create(Type) و Release(IMiddleware). در حالی که متد Create(Type) برای ایجاد یک نمونه میانافزار برای هر درخواست استفاده میشود، روش Release(IMiddleware) یک نمونه IMiddleware را در پایان درخواست منتشر میکند. اجرای پیشفرض IMiddlewareFactory در کلاس Microsoft.AspNetCore.Http.MiddlewareFactory موجود است.
پست های مرتبط
نحوه استفاده از فعال سازی میان افزار مبتنی بر کارخانه در ASP.NET Core
نحوه استفاده از فعال سازی میان افزار مبتنی بر کارخانه در ASP.NET Core
نحوه استفاده از فعال سازی میان افزار مبتنی بر کارخانه در ASP.NET Core