
یادگیری سی شارپ از مفاهیم پایه تا پروژه محور: شیگرایی، کار با SQL و LINQ، ORMها (Entity Framework)، ساخت پروژه مدیریت رستوران با گزارشات حرفهای و امکانات کامل!
مشاهده بیشتر
یادگیری MVC Core از مبانی تا پیشرفته: شیگرایی، Routing، Entity Framework، امنیت، تست یونیت، Razor، Ajax، و پروژههای کاربردی! یک دوره کامل برای تسلط بر توسعه وب با ASP.NET Core. به صورت حضوری و آنلاین!
مشاهده بیشترمشخصات مقاله
|آموزش جامع Microsoft Blazor|تزریق وابستگی در فریمورک Blazor|
تزریق وابستگی در فریمورک Blazor
تزریق وابستگی یک روش برای به دست آوردن وارونگی کنترل (Inversion of Control - IoC) بین کلاس ها و وابستگی های آنها است. به بیان دیگر، تزریق وابستگی روشی است برای دسترسی به خدماتی(services) که در یک مکان مرکزی پیکربندی شده اند.
-
فریمورک بلیزر
دارای پشتیبانی داخلی (built-in) برای تزریق وابستگی است.
-
برنامه های کاربردی
فریم ورک بلیزر
می توانند از خدمات داخلی، با تزریق آنها به درون مولفه ها استفاده کنند.
-
همچنین برنامه های کاربردی
فریمورک بلیزر
می توانند خدمات سفارشی تعریف کنند و از طریق DI آنها را در دسترس قرار دهند.
خدمات فریم ورک بلیزر برای تزریق وابستگی
سیستم DI بلیزر مبتنی بر DI system in ASP.NET Core است. خدمات تزریق وابستگی می توانند بر اساس طول عمر زیر پیکربندی شوند:
1. روش Singleton برای تزریق وابستگی
تزریق وابستگی، یک نمونه(instance) از خدمت را ایجاد می کند. تمامی مولفه هایی که به این خدمت نیاز دارند، یک ارجاع به این نمونه را دریافت می کنند.
2. روش transient برای تزریق وابستگی در asp.net
زمانی که یک مولفه به این خدمت نیاز داشته باشد، یک نمونه جدید از این خدمت را دریافت می کند.
3. روش scoped برای تزریق وابستگی در asp.net
در حال حاظر،
فریم ورک بلیزر
مفهوم حوزه های تزریق وابستگی (DI scopes) را ندارد. Scoped همانند Singleton رفتار می کند. بنابر این، Singleton را ترجیح می دهیم و از Scoped دوری می کنیم.
خدمات فریم ورک Blazor
به طور پیش فرض، BrowserServiceProvider در
فریمورک بلیزر
به صورت خودکار خدمات زیر را به مجموعه خدمات یک برنامه کاربردی اضافه می کند.
1. کلاس UrlHelper
کمکی برای کار با URl ها و حالت جهت یابی (navigation state) هستند. (singleton)
2. کلاس httpclient در asp.net
متدهایی برای ارسال درخواست های HTTP و دریافت پاسخ های HTTP از یک منبع شناسایی شده توسط یک URl، ارائه می کند. (singleton)
3. روش scoped برای تزریق وابستگی در asp.net
در حال حاظر،
فریم ورک بلیزر
مفهوم حوزه های تزریق وابستگی (DI scopes) را ندارد. Scoped همانند Singleton رفتار می کند. بنابر این، Singleton را ترجیح می دهیم و از Scoped دوری می کنیم.
ترکیب کلاس ها با تزریق وابستگی
در اینجا یک خدمت ساده که داده های کارمندان را به صورت نا همگام (asynchronously) بازیابی می کند، می بینیم.
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace BlazorApplication.Services { public class Employee { public string FirstName { get; set; } public string LastName { get; set; } } public interface IRepository { Task< IReadOnlyList< Employee>> GetAllEmployeesAsync(); } public class Repository : IRepository { private static Employee[] Employees { get; set; } = new[] { new Employee { FirstName = "Andy", LastName = "White" }, new Employee { FirstName = "Mark", LastName = "Doe" } }; public async Task< IReadOnlyList< Employee>> GetAllEmployeesAsync() { await Task.Delay(100); return Repository.Employees; } } }
زمانی که یک برنامه کاربردی بلیزر جدید ساخته می شود، فایل Startup.cs را می بینید که شامل متدهای ConfigureServices و Configure است.
using Microsoft.AspNetCore.Blazor.Builder; using Microsoft.Extensions.DependencyInjection; namespace BlazorApplication { public class Startup { public void ConfigureServices(IServiceCollection services) { } public void Configure(IBlazorApplicationBuilder app) { app.AddComponent< App>("app"); } } }
متد ConfigureServices ، IServiceCollection را به عنوان یک آرگومان دارد، که یک لیست از اشیای توصیف گر خدمات است (ServiceDescriptor). شما می توانید با ارائه توصیف گرهای خدمات، خدمات را به مجموعه خدمات اضافه کنید.
public void ConfigureServices(IServiceCollection services) { services.AddSingleton< IRepository, Repository>(); }
تزریق خدمات در فریم ورک Blazor
برای تزریق یک خدمت به یک مولفه، از کلمه کلیدی @inject به شیوه ای که در نمونه زیر نشان داده شده است استفاده کنید.
@ using BlazorApplication.Services @ page "/" @ inject IRepository Repository < h1>Hello, world!< /h1> < ul> @if (Employees != null) { @foreach (var emp in Employees) { < li>@emp.FirstName @emp.LastName< /li> } } < /ul> @ functions { private IReadOnlyList< Employee> Employees; protected override async Task OnInitAsync() { Employees = await Repository.GetAllEmployeesAsync(); } }
از نظر فنی، این کد یک خصیصه تولید می کند و آن را به ویژگی InjectAttribute مجهز می کند.
اگر مولفه های
فریم ورک بلیزر
به یک کلاس پایه (base) نیاز داشته باشند، و نیز کلاس پایه به خصیصه های تزریق شده نیاز داشته باشد، InjectAttribute را به صورت دستی اضافه کنید.
public class ComponentBase : BlazorComponent { [Inject] protected IRepository Repository { get; set; } ... }