Skip to content

کلاس DependencyInjection ​

این کلاس مسئول تنظیم وابستگی‌ها در لایه Application است. این کلاس از الگوی Dependency Injection برای مدیریت وابستگی‌ها استفاده می‌کند.

توضیحات خط به خط ​

  1. تعریف کلاس:

    • public static class DependencyInjection: این خط یک کلاس استاتیک به نام DependencyInjection تعریف می‌کند که نمی‌تواند نمونه‌سازی شود و معمولاً برای نگهداری متدهای استاتیک استفاده می‌شود.
  2. تعریف متد AddApplication:

    • public static IServiceCollection AddApplication(this IServiceCollection services): این خط یک متد استاتیک به نام AddApplication تعریف می‌کند که یک IServiceCollection را به عنوان ورودی می‌پذیرد و یک IServiceCollection را برمی‌گرداند. این متد به عنوان یک متد توسعه‌دهنده برای IServiceCollection عمل می‌کند.
  3. افزودن MediatR:

    • services.AddMediatR(configuration =>: این بخش از کد، MediatR را به مجموعه خدمات اضافه می‌کند. MediatR یک کتابخانه برای پیاده‌سازی الگوی CQRS است.
    • configuration.RegisterServicesFromAssembly(typeof(DependencyInjection).Assembly);: این خط تمام خدمات موجود در اسمبلی فعلی را ثبت می‌کند.
    • configuration.AddOpenBehavior(typeof(LoggingBehavior<,>));: این خط رفتار مشترک LoggingBehavior را به MediatR اضافه می‌کند.
    • configuration.AddOpenBehavior(typeof(ValidationBehavior<,>));: این خط رفتار مشترک ValidationBehavior را به MediatR اضافه می‌کند.
  4. افزودن اعتبارسنج‌ها:

    • services.AddValidatorsFromAssembly(typeof(DependencyInjection).Assembly);: این خط تمام اعتبارسنج‌های موجود در اسمبلی فعلی را به مجموعه خدمات اضافه می‌کند. این اعتبارسنج‌ها برای اعتبارسنجی داده‌ها در سیستم استفاده می‌شوند.
  5. افزودن PricingService:

    • services.AddTransient<PricingService>();: این خط یک نمونه از PricingService را به عنوان یک وابستگی گذرا به مجموعه خدمات اضافه می‌کند. وابستگی‌های گذرا هر بار که درخواست می‌شوند، نمونه‌سازی می‌شوند.
  6. بازگشت مجموعه خدمات:

    • return services;: این خط مجموعه خدمات را برمی‌گرداند تا بتواند در جای دیگری در برنامه استفاده شود.
  7. پایان متد و کلاس:

    • }: این خط پایان متد AddApplication را نشان می‌دهد.
    • }: این خط پایان کلاس DependencyInjection را نشان می‌دهد.

ویژگی‌های کلیدی ​

  1. تنظیم وابستگی‌ها:
    • افزودن و تنظیم وابستگی‌های مورد نیاز در لایه Application
    • استفاده از MediatR برای مدیریت رفتارهای مشترک

ساختار کد ​

csharp
public static class DependencyInjection
{
    public static IServiceCollection AddApplication(this IServiceCollection services)
    {
        services.AddMediatR(configuration =>
        {
            configuration.RegisterServicesFromAssembly(typeof(DependencyInjection).Assembly);

            configuration.AddOpenBehavior(typeof(LoggingBehavior<,>));

            configuration.AddOpenBehavior(typeof(ValidationBehavior<,>));
        });

        services.AddValidatorsFromAssembly(typeof(DependencyInjection).Assembly);

        services.AddTransient<PricingService>();

        return services;
    }
}

نحوه کار ​

  1. تنظیم وابستگی‌ها:
    • افزودن و تنظیم وابستگی‌های مورد نیاز در لایه Application
    • استفاده از MediatR برای مدیریت رفتارهای مشترک

مزایای این طراحی ​

  1. مدیریت متمرکز وابستگی‌ها:

    • استفاده از کلاس‌های اختصاصی برای مدیریت وابستگی‌ها
    • افزایش خوانایی و نگهداری‌پذیری کد
  2. افزایش تست‌پذیری:

    • استفاده از الگوی Dependency Injection برای افزایش تست‌پذیری
    • کاهش وابستگی‌های سخت‌کد شده

Alireza Abasi - Released under the MIT License.