کلاس 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 برای افزایش تستپذیری
- کاهش وابستگیهای سختکد شده