لو روحنا للـ 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;
}