TinyIoC یک وارونگی سبک و سریع محفظه کنترلی است که تزریق وابستگی را ساده و آسان می کند. در اینجا نحوه استفاده از آن در برنامه های ASP.NET Core آورده شده است.
هنگام کار با تزریق وابستگی و وارونگی کنترل در برنامههای ASP.NET Core، ممکن است برای جلوگیری از پیچیدگیهای غیرضروری یا هزینههای غیرضروری، به یک ظرف IoC ساده یا سبک نیاز داشته باشید. بیشتر کانتینرهای IoC منابع زیادی مصرف میکنند – زمانی که به یک کانتینر IoC کامل در برنامه خود نیاز ندارید ایدهآل نیست.
در این مقاله مفاهیم وارونگی کنترل و تزریق وابستگی را مورد بحث قرار میدهیم و TinyIoC را معرفی میکنیم، یک ظرف IoC که هم ساده و هم سبک است. سپس نشان خواهیم داد که چگونه می توانیم با TinyIoC در برنامه های ASP.NET Core کار کنیم.
برای استفاده از نمونه کدهای ارائه شده در این مقاله، باید Visual Studio 2022 را در سیستم خود نصب کنید. اگر قبلاً نسخهای ندارید، میتوانید Visual Studio 2022 را از اینجا بارگیری کنید.
وارونگی تزریق کنترل و وابستگی
الگوهای معماری وارونگی کنترل (IoC) و تزریق وابستگی (DI) به شما کمک میکنند ماژولار بودن، آزمایشپذیری و قابلیت نگهداری برنامه خود را افزایش دهید. IoC یک الگوی طراحی است که به شما امکان می دهد اجزا را جدا کنید، پیاده سازی های وابستگی را جایگزین کنید و تست را تسهیل کنید. DI زیرمجموعه ای از اصل IoC است و به عنوان یکی از روش های پیاده سازی IoC عمل می کند. علاوه بر DI، چندین تکنیک جایگزین برای پیادهسازی IoC وجود دارد، مانند رویدادها، نمایندگان، الگوهای الگو، روشهای کارخانه، و مکان یاب خدمات.
در بخشهای بعدی، نحوه کار با TinyIoC در ASP.NET Core را بررسی خواهیم کرد. قبل از شروع، اجازه دهید یک پروژه ASP.NET Core Web API جدید در ویژوال استودیو ایجاد کنیم. ما از این پروژه در بخشهای بعدی این مقاله استفاده خواهیم کرد.
یک پروژه ASP.NET Core Web API در Visual Studio 2022 ایجاد کنید
برای ایجاد یک پروژه ASP.NET Core Web API در Visual Studio 2022، مراحل ذکر شده در زیر را دنبال کنید.
- Visual Studio 2022 IDE را راه اندازی کنید.
- روی “ایجاد پروژه جدید” کلیک کنید.
- در پنجره “ایجاد پروژه جدید”، “ASP.NET Core Web API” را از لیست الگوهای نمایش داده شده انتخاب کنید.
- بعدی را کلیک کنید.
- در پنجره “پیکربندی پروژه جدید خود”، نام و مکان پروژه جدید را مشخص کنید.
- به صورت اختیاری، بسته به تنظیمات برگزیده خود، کادر انتخاب «قرار دادن راه حل و پروژه در یک فهرست راهنمای» را علامت بزنید.
- بعدی را کلیک کنید.
- در پنجره «اطلاعات اضافی» که در ادامه نشان داده شده است، کادر «استفاده از کنترلکنندهها (برای استفاده از حداقل APIها علامت آن را بردارید» علامت بزنید. ما از حداقل API در این پروژه استفاده نخواهیم کرد.
- در جای دیگری از پنجره «اطلاعات اضافی»، «نوع احراز هویت» را روی «هیچ» (پیشفرض) بگذارید و مطمئن شوید که کادرهای «فعال کردن پشتیبانی از API باز کردن»، «پیکربندی برای HTTPS» و «فعال کردن داکر» را انتخاب کنید. ” کنترل نشده باقی بماند. ما در اینجا از هیچ یک از این ویژگی ها استفاده نخواهیم کرد.
- روی ایجاد کلیک کنید.
ما از این پروژه ASP.NET Core Web API برای کار با TinyIoC در بخشهای زیر استفاده خواهیم کرد.
بسته TinyIoC NuGet را نصب کنید
بعد بسته TinyIoC NuGet را به پروژه Web API که در ویژوال استودیو ایجاد کردید اضافه کنید. پروژه را در پنجره Solution Explorer انتخاب کنید و کلیک راست کرده و “Manage NuGet Packages” را انتخاب کنید. در پنجره NuGet Package Manager، بسته TinyIoC را جستجو کرده و آن را نصب کنید.
از طرف دیگر، میتوانید بسته TinyIoC را از طریق کنسول NuGet Package Manager با وارد کردن خط نشان داده شده در زیر نصب کنید.
PM> Install-Package TinyIoC
از آنجایی که ما با .NET Core کار می کنیم، باید از بسته NuGet TinyIoC Release Candidate استفاده کنیم. باید کادر بررسی «شامل پیشانتشار» را در پنجره «مدیریت بستههای NuGet…» علامت بزنید و آخرین نسخه بسته TinyIoC RC NuGet را همانطور که در شکل ۱ زیر نشان داده شده است نصب کنید.
شکل ۱: نصب TinyIoC RC برای ASP.NET Core.
یک کلاس مینیمالیستی در ASP.NET Core ایجاد کنید
در این مثال، یک کلاس مینیمالیستی ایجاد خواهیم کرد که از آن به عنوان یک وابستگی در کنترلر API که بعداً ایجاد خواهیم کرد، استفاده خواهیم کرد. برای انجام این کار، یک کلاس جدید به نام MyService ایجاد کنید و کد تولید شده را با لیست کد زیر جایگزین کنید.
using System.Diagnostics; namespace TinyIoC_Demo { public class MyService : IMyService { public string MyMethod() { Trace.WriteLine("Inside MyMethod()"); return "Hello World"; } } }
اینترفیس IMyService حاوی اعلان روشی به نام MyMethod است.
namespace TinyIoC_Demo { public interface IMyService { public string MyMethod(); } }
یک ظرف TinyIoC را در هسته ASP.NET پیکربندی کنید
برای ثبت خدمات با استفاده از ظرف TinyIoC در ASP.NET Core، باید کد زیر را در فایل Program.s پروژه ای که قبلا ایجاد کردیم بنویسید.
TinyIoCContainer.Current.Register<IMyService, MyService>().AsSingleton();
اگر وابستگیهای متعددی برای ثبت نام در کانتینر دارید، میتوانید آنها را در یک متد بنویسید و سپس برای اطمینان از تمیز بودن کد، یک بار آن را در اینجا فراخوانی کنید.
internal static class Bootstrap { internal static void RegisterDependencies() { TinyIoCContainer.Current.Register <IMyService, MyService>().AsSingleton(); //Write code here to register the other services } }
اکنون میتوانید از متد RegisterDependencies کلاس Bootstrap برای ثبت سرویسها با کانتینر داخلی ASP.NET Core مانند شکل زیر استفاده کنید.
Bootstrap.RegisterDependencies();
میتوانید بهصورت اختیاری، همانطور که در قطعه کد زیر نشان داده شده است، نامی را هنگام ثبت سرویس در کانتینر ارائه دهید.
var myServiceInstance = new MyService(); TinyIoCContainer.Current.Register<IMyService>(myServiceInstance, "MyService");
کد منبع کامل Program.cs
کد منبع کامل فایل Program.cs برای مرجع شما در زیر آورده شده است.
using TinyIoC; using TinyIoC_Demo; var builder = WebApplication.CreateBuilder(args); // Add services to the container. Bootstrap.RegisterDependencies(); builder.Services.AddControllers(); var app = builder.Build(); // Configure the HTTP request pipeline. app.UseAuthorization(); app.MapControllers(); app.Run(); internal static class Bootstrap { internal static void RegisterDependencies() { TinyIoCContainer.Current.Register <IMyService, MyService>().AsSingleton(); //Write code here to register the other services } }
وابستگی ها را در ASP.NET Core حل کنید
وقتی وابستگیها ثبت و به کانتینر اضافه شدند، باید بتوانید وابستگیها را در برنامه خود بازیابی کنید و از آنها برای فراخوانی متدها استفاده کنید. برای رفع وابستگی ها، می توانید از روش Resolve از کلاس TinyIoCContainer همانطور که در قطعه کد زیر نشان داده شده است استفاده کنید.
var _myService = TinyIoCContainer.Current.Resolve<IMyService>();
به نحوه ارسال نوع برای بازیابی نوع مناسب شی از ظرف توجه کنید. اکنون می توانید از این نمونه (به نام _myService) برای فراخوانی روش های مربوط به رابط IMyService استفاده کنید.
یک کنترلر API در ASP.NET Core ایجاد کنید
یک کنترلر API جدید ایجاد کنید و کد منبع تولید شده را با لیست کد زیر جایگزین کنید.
using Microsoft.AspNetCore.Mvc; using TinyIoC; namespace TinyIoC_Demo.Controllers { [Route("api/[controller]")] [ApiController] public class TinyIOCDemoController : ControllerBase { private readonly IMyService _myService; public TinyIOCDemoController() { _myService = TinyIoCContainer.Current.Resolve<IMyService>(); } [HttpGet] public ActionResult Get() { return Ok(_myService.MyMethod()); } } }
وقتی یک نقطه شکست در روش اقدام HttpGet تنظیم می کنید و برنامه را اجرا می کنید، خواهید دید که نمونه نوع IMyService به درستی در کنترلر حل شده است و در روش اقدام موجود است.
شکل ۲: ظرف TinyIoC در حال کار است!
نتیجه گیری
برای سادگی، ما یک پیادهسازی حداقلی از ظرف TinyIoC در هسته ASP.NET ایجاد کردهایم. میتوانید تستهای واحد ارائهشده را در اینجا کاوش کنید. درباره نحوه استفاده از ظرف TinyIoC بیشتر بیاموزید. شما همچنین می توانید کانتینر IoC سفارشی خود را بسازید. من این را در مقاله آینده اینجا بررسی خواهم کرد.
پست های مرتبط
نحوه استفاده از TinyIoC در ASP.NET Core
نحوه استفاده از TinyIoC در ASP.NET Core
نحوه استفاده از TinyIoC در ASP.NET Core