[Dotnet] Program.cs dosyasındakı DI'ları toparlamak
İçerikler
Kod yazarken özellikle C# gibi bir OOP dil kullanınca her şey derli toplu olsun istiyorum. Çalıştığım projede Program.cs dosyasının Service katmanından eklenen Dependency Injection’larının epey kalabalık olması ve daha da eklenecek şeylerin olması sinirimi bozdu.
Program.cs dosyası ne işe yarıyor?
.NET projelerinde Program.cs, uygulamanın başlangıç noktasıdır (entry point). Uygulamanın çalıştığında ilk olarak buradaki Main metodu veya WebApplication yapılandırması çalışır. Özetle;
- Uygulamanın giriş noktasını tanımlar
- DI Container (Dependency Injection) servislerini burada tanımlarsın
- Middleware pipeline burada oluşturulur
- Uygulama ayarlarını yükler (appsettings.json vs.)
- Web server (Kestrel) burada başlatılır
Kötü vaziyet
builder.Services.AddScoped(typeof(IRepositoryAsync<>), typeof(RepositoryAsync<>));
builder.Services.AddScoped(typeof(IService<>), typeof(Service<>));
builder.Services.AddScoped<BilmemNeService>();
builder.Services.AddScoped<BilmemNeGenelService>();
builder.Services.AddScoped<BilmemNeMobilBildirimService>();
builder.Services.AddScoped<IDegisikServis, DegisikServis>();
builder.Services.AddScoped<IBaskaBirService, BaskaBirService>();Çözüm
Hal böyle olunca projede bir DependencyInjections klasörü açmak gerekti. İçine modül bazlı bir yapı kurdum.
// file: DependencyInjections/BilmemNeDependencyInjection
public static class BilmemNeDependencyInjection
{
public static IServiceCollection AddBilmemNeServices(this IServiceCollection services)
{
builder.Services.AddScoped<BilmemNeService>();
builder.Services.AddScoped<BilmemNeGenelService>();
builder.Services.AddScoped<BilmemNeMobilBildirimService>();
return services;
}
}Sonra Program.cs dosyasına gelip;
builder.Services.AddScoped(typeof(IRepositoryAsync<>), typeof(RepositoryAsync<>));
builder.Services.AddScoped(typeof(IService<>), typeof(Service<>));
builder.Services.AddBilmemNeServices();
// diger modul haline getirdigim AddModulServices eklemeleri..Valla dünya varmış :)