استفاده از چندین تزریق وابستگی در ASP.NET Core

استفاده از چندین تزریق وابستگی در ASP.NET Core

ثبت و استفاده از چندین تزریق وابستگی در Core ASP.NET

 

در این مقاله، ما به بررسی نحوه ثبت چندین وابستگی در  ASP.NET  Core و نحوه استفاده از این وابستگی ها در کلاس های خود با تزریق آنها خواهیم پرداخت.

 

معرفی
ممکن است شرایطی وجود داشته باشد که شما بخواهید چند وابستگی مشابه را به برنامه تزریق کنید.
برای مثال، اگر شما می خواهید بدون تغییر کد موجود، ویژگی های جدیدی را به برنامه اضافه کنید، بهترین کار برای انجام آن این است که یک پیاده سازی جدید برای آن اضافه کنید. درخواست شما باید به روش خاصی نوشته شود تا این کار درست انجام شود
 در این مقاله با یک مثال ساده و کاربردی میتوانید این کار را انجام بدهید

dependency-injection-aspnetcore

ثبت و استفاده از چندین تزریق وابستگی در Core ASP.NET

 

در این مقاله، ما به بررسی نحوه ثبت چندین وابستگی در  ASP.NET  Core و نحوه استفاده از این وابستگی ها در کلاس های خود با تزریق آنها خواهیم پرداخت.

 

معرفی
ممکن است شرایطی وجود داشته باشد که شما بخواهید چند وابستگی مشابه را به برنامه تزریق کنید.
برای مثال، اگر شما می خواهید بدون تغییر کد موجود، ویژگی های جدیدی را به برنامه اضافه کنید، بهترین کار برای انجام آن این است که یک پیاده سازی جدید برای آن اضافه کنید. درخواست شما باید به روش خاصی نوشته شود تا این کار درست انجام شود.
 در این مقاله با یک مثال ساده و کاربردی میتوانید این کار را انجام بدهید.
 
به عنوان مثال یک وبسایت تجارت الکترونیکی را در نظر بگیرید که در مواردی خاص میخواهد به برخی مشتریان خود تخفیف هایی بدهد 
یک اینترفیس به نام IDiscount  جهت انجام امور منطقی و محاسبای تخفیف ها در نظر گرفته ایم 
و یک IDiscountProcessor جهت فراخوانی تمامی متدهای موجود در IDiscount  به کار میبریم 

 

حال جهت تزریق این اینترفیس به پروژه میتوان از روش های زیر استفاده نمود

یکی از روش های موجود استفاده از IServiceCollection است که در آن میتوان تزریق وابستگی با طول عمر را مشخص نمود

مانند:

 



services.AddScoped();  
services.AddScoped();  
services.AddScoped();  
services.AddScoped();


 

در اینجا من OrderDiscountProcessor ، IDiscountProcessor و IDiscount را ثبت کرده ام.

این کار خوب است و پاسخ میدهد ، اما مشکلی در پیش دارد و آن اینکه تصور کنید یکی از برنامه نویس ها به طور تصادفی متد SeasonalDiscount را فراخوانی کرده است و نتیجه آن میشود که تخفیف برای تمامی سفارشات دوبار ثبت میشود.

 

روش بهتر ثبت نام چندین پیاده سازی این است که از روش extension extension TryAddEnumerable داده شده در فضای نام Microsoft.Extensions.DependencyInjection.Extensions استفاده کنید. این پیاده سازی هیچ متد تکراری را دو بار فراخوانی نمیکند و ثبت نمی کند.این تزریق وابستگی کمی متفاوت است که در آن شما نیاز به استفاده از ServiceDeccriptors برای ثبت وابستگی دارید.

 



services.AddScoped();  
services.TryAddEnumerable(new[]  
{  
    ServiceDescriptor.Scoped(),  
    ServiceDescriptor.Scoped(),  
    ServiceDescriptor.Scoped()  
});


 

 

استفاده از چندین تزریق وابستگی با این روش باید حتما نوع داده ای از نوع IENumerable باشد مانند زیر
 

public class OrderDiscountProcessor : IDiscountProcessor { private readonly IEnumerable _discounts; public OrderDiscountProcessor(IEnumerable discounts) { _discounts = discounts; } // ... } 

در اینجا نیز من تمامی مواردی را که به پروژه تزریق کرده ام را مشاهده می نمایید

 


public (double, List) ProcessDiscount(OrderViewModel order)  
{  
    var discountDiscroptoons = new List();  
    var totalDiscount = 0.0;  
  
    foreach (var discount in _discounts)  
    {  
        var addedDiscount = discount.CalculateDiscount(order);  
        if (addedDiscount > 0)  
        {  
             discountDiscroptoons.Add(discount.Description);  
        }  
        totalDiscount += addedDiscount;  
    }  
  
    return (totalDiscount, discountDiscroptoons);  
 }

 

اکنون همه چیز برای استفاده آماده است.

نتیجه: در این مقاله نگاهی ساده به تزریق چندین وابستگی همنام در پروژه پرداختیم.

 

نظرات یا سوالات خودرا با ما درمیان بگذارید

0912 097 5516 :شماره تماس
0713 625 1757 :شماره تماس