آموزش تزریق وابستگی در ASP.Net Core
تزریق وابستگی یکی از مفاهیم کاربردی و مهم در طراحی وب و برنامه نویسی C# است. در این مقاله آموزشی به توضیحات لازم در خصوص آن میپردازیم.
تعریف Dependenct Injection در دات نت کور
ASP.Net Core از یک الگوی طراحی به نام Dependency Injection که یک روش برای Inverion of Control یا وارونگی بین کلاسها و وابستگیهای پروژه موردنظر است (طبق این اصل، ماژولهای سطح بالا به ماژولهای سطح پایین خود نیاید وابسته باشند؛ بلکه هر دو باید به کلاسهایی انتزاعی (معمولا اینترفیس) وابسته باشند)، بهره میگیرد. این امکان سبب میشود که بشود به راحتی لایههای برنامه را از هم مجزا ساخت و همیشه هم بتوان کنترل ساده و مناسبی را با ایجاد کمترین وابستگی بین لایهها یا کلاسهای برنامه، روی آنها داشت.
IoC Container یا کانتینر DI، یک Framework برای پیادهسازی اتوماتیک تزریق وابستگیها است. این فریمورک، به جای روش سنتی، خودش طول عمر هر شی را کنترل و مدیریت میکند و وابستگی بین کلاسها را هم پیادهسازی میکند. ASP.Net Core این فرمورک را به صورت پیشفرض در هسته خود دارد و توسط برخی سرویسها این امکانات را به ما ارائه میدهد.
برای استفاده از کلاسهای موجود در IoC Container، کافی است هنگام نیاز، آنها را توسط کلاس سازنده، از آن استخراج کنیم. در واقع ما ابتدا کلاسهای مورد نیاز خودمان را به IoC Container معرفی میکنیم و سپس با کلاس سازنده هنگام نیاز فراخوانی میکنیم؛ البته امکان View Injection نیز در پروژههای MVC، Razor Page و Blazor وجود دارد. برای معرفی کلاسها به IoC Container هم باید سرویس موردنظر را به متد ConfigureServices در Startup در دانت نت 5 معرفی کرد یا در دات نت 6، در کلاس Program.cs باید آن را اضافه کرد.
طول عمر سرویسها یا Service Lifetimeها
طول عمر یا Servce Lifetime سریسها به سه شکل است:
Singleton: این نوع سرویسها اولین باری که درخواست میشوند، ایجاد شده و در درخواستهای آتی این سرویسها نیر از همان نمونهی ایجاد شده استفاده میشود.
از کد زیر در متد در دات نت 5 میتوانیم برای تعریف این نوع سرویس استفاده کنیم. IYourService میتواند نام اینترفیس و YourService کلاسی باشد که از آن ارثبری کرده و متدهای آن را پیاده کرده است. این کد به این مفهوم است که هروقت در پروژه، IYourService درخواست شد، یک نمونه از کلاس YourService با طول عمر Singleton ساخته میشود.
services.AddSingleton<IYourService, YourService>();
Scoped: این سرویسها در یک درخواست HTTP مشابه، اگر در جاهای مختلفی از آن نیار باشد، مثلا در Controller و View، یک نمونه از آن ایجاد شده و استفاده میشود؛ اما در درخواست HTTP جدید، نمونه جدیدی از آن سرویس ایجاد میشود.
کد ایجاد این نوع سرویس در دات نت 5 به شکل زیر است:
services.AddScoped<IYourService, YourService>();
Transient: این سرویسها هر وقت که درخواست میشوند، مجددا ایجاد میشوند، چه در یک درخواست HTTP مشابه باشند، چه نباشند.
برای ایجاد این نوع سرویس در دات نت 5 از کد زیر میتوانید استفاده کنید.
services.AddTransient<IYourService, YourService>();
تصویر زیر را ببینید تا با نکاتی که در بالا گفته شد، بهتر آشنا شوید.
لینک این مقاله را در شبکههای اجتماعی به اشتراک بگذارید.