لو روحنا للـ Program هنلاقي منطقة الـ Services بقت فيها كود كتير جدًا ولسا هيكبر أكتر فالـ Main هيبقا كبير جدًا واحنا مش عايزين نعمل كدا
فاحنا هنشتغل بنفس الطريقة اللي شغال بيها الـ .NET انه بيعمل Functions لكل حاجة وبيعمل كل حاجة فيها
زي مثلًا الـ AddControllers
بيعدي على كل كنترولر ويضيفه وهكذا
لازم اناديها من Services
هنعمل Folder اسمه Extensions في بروجكت الـ APIs
public class static ApplicationServicesExtension
{
public void AddApplicationServices(IServiceCollection services)
{
services.AddScoped(typeof(IGenericRepository<>), typeof(GenericRepository<>));
services.AddScoped(typeof(IGenericRepository<>), typeof(GenericRepository<>));
}
}
// Program
ApplicationServicesExtension.AddApplicationServices(builder.Services);
كدا خلاص بس أنا محتاج اناديها زي الباقي كدا builder.Services.
بس دا بيحصل لما يبقا Cs Extension Methods بس مش أكتر
وعشان أعمل كدا بروح أكتب this
وبنخليها ترجع IServiceCollection
عشان ممكن بعد كدا واعمل AddScoped
public class static ApplicationServicesExtension
{
public IServiceCollection AddApplicationServices(this IServiceCollection services)
{
services.AddScoped(typeof(IGenericRepository<>), typeof(GenericRepository<>));
services.AddScoped(typeof(IGenericRepository<>), typeof(GenericRepository<>));
return services;
}
}
// Program
builder.Services.AddApplicationServices();
// وهنشيل التانية ودي أحسن أكيد
// builder.Services.AddApplicationServices().AddScoped();
جزء الـ Swagger برضو ممكن نعمله Class
public static class SwaggerServicesExtension
{
public static class SwaggerServicesExtension
{
public static IServiceCollection AddSwaggerServices(this IServiceCollection services)
{
services.AddEndpointsApiExplorer();
services.AddSwaggerGen();
return services;
}
}
}
// Program
// under AddControllers
builder.Services.AddSwaggerServices();
الجزء بتاع الـ Swagger في الـ Middleware برضو ممكن نعمله Extension في نفس الكلاس اللي فوق
public static WebApplication UseSwaggerMiddlewares(this WebApplication app)
{
app.UseSwagger();
app.UseSwaggerUI();
return app;
}