کلاس DependencyInjection
این کلاس مسئول تنظیم وابستگیها در لایه Application است. این کلاس از الگوی Dependency Injection برای مدیریت وابستگیها استفاده میکند.
توضیحات خط به خط
تعریف کلاس:
public static class DependencyInjection
: این خط یک کلاس استاتیک به نامDependencyInjection
تعریف میکند که نمیتواند نمونهسازی شود و معمولاً برای نگهداری متدهای استاتیک استفاده میشود.
تعریف متد AddApplication:
public static IServiceCollection AddApplication(this IServiceCollection services)
: این خط یک متد استاتیک به نامAddApplication
تعریف میکند که یکIServiceCollection
را به عنوان ورودی میپذیرد و یکIServiceCollection
را برمیگرداند. این متد به عنوان یک متد توسعهدهنده برایIServiceCollection
عمل میکند.
افزودن MediatR:
services.AddMediatR(configuration =>
: این بخش از کد، MediatR را به مجموعه خدمات اضافه میکند. MediatR یک کتابخانه برای پیادهسازی الگوی CQRS است.configuration.RegisterServicesFromAssembly(typeof(DependencyInjection).Assembly);
: این خط تمام خدمات موجود در اسمبلی فعلی را ثبت میکند.configuration.AddOpenBehavior(typeof(LoggingBehavior<,>));
: این خط رفتار مشترکLoggingBehavior
را به MediatR اضافه میکند.configuration.AddOpenBehavior(typeof(ValidationBehavior<,>));
: این خط رفتار مشترکValidationBehavior
را به MediatR اضافه میکند.
افزودن اعتبارسنجها:
services.AddValidatorsFromAssembly(typeof(DependencyInjection).Assembly);
: این خط تمام اعتبارسنجهای موجود در اسمبلی فعلی را به مجموعه خدمات اضافه میکند. این اعتبارسنجها برای اعتبارسنجی دادهها در سیستم استفاده میشوند.
افزودن PricingService:
services.AddTransient<PricingService>();
: این خط یک نمونه ازPricingService
را به عنوان یک وابستگی گذرا به مجموعه خدمات اضافه میکند. وابستگیهای گذرا هر بار که درخواست میشوند، نمونهسازی میشوند.
بازگشت مجموعه خدمات:
return services;
: این خط مجموعه خدمات را برمیگرداند تا بتواند در جای دیگری در برنامه استفاده شود.
پایان متد و کلاس:
}
: این خط پایان متدAddApplication
را نشان میدهد.}
: این خط پایان کلاسDependencyInjection
را نشان میدهد.
ویژگیهای کلیدی
- تنظیم وابستگیها:
- افزودن و تنظیم وابستگیهای مورد نیاز در لایه 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;
}
}
نحوه کار
- تنظیم وابستگیها:
- افزودن و تنظیم وابستگیهای مورد نیاز در لایه Application
- استفاده از MediatR برای مدیریت رفتارهای مشترک
مزایای این طراحی
مدیریت متمرکز وابستگیها:
- استفاده از کلاسهای اختصاصی برای مدیریت وابستگیها
- افزایش خوانایی و نگهداریپذیری کد
افزایش تستپذیری:
- استفاده از الگوی Dependency Injection برای افزایش تستپذیری
- کاهش وابستگیهای سختکد شده