Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

.NET 6 – WebApplicationBuilder’ı İnceleyelim

Merhaba,

Bu içeriğimizde .NET 6 ile gelen WebApplicationBuilder‘ı teknik olarak inceleyecek ve aynı işlevselliğe sahip olan generic Host ile aralarındaki benzerlikleri değerlendireceğiz.

Bir önceki .NET 6’da Yeni Gelen WebApplication/WebApplicationBuilder’ı Eski Generic Host İle Karşılaştırma başlıklı makalemizden de biliyorsunuz ki, Asp.NET Core uygulamalarını oluşturmanın ve ayağa kaldırmanın yeni yolu WebApplication ve WebApplicationBuilder nesnelerinden geçmektedir. Ayrıca .NET 6’da, geleneksel ‘Program.cs’ ve ‘Startup.cs’ bölünmesi yerine tüm bootstrap yapılanması ‘Program.cs’ üzerinde geliştirilmekte ve Top-Level Statements, Implicit Using vs. gibi çeşitli güncellemeler eşliğinde uygulamanın başlangıcı hem zahiren, hem de batınen sadeleştirilmiş bulunmaktadır.

Yukarıda referans edilen makalemizde WebApplication ve WebApplicationBuilder türleri hakkında yapılandırmaya dair hasbihalde bulunmuştuk. Bu içeriğimizde ise generic Host ile aynı esneklik ve işlevselliğe sahip olan bu nesnelerin daha basit API’ları nasıl sunabildiğini inceleyeceğiz.

Şimdi, her şeyden önce WebApplicationBuilder içerisinde tanımlı olan ‘WebHostbuilder.WebHost‘ ve ‘Hostbuilder.Host‘ komutları üzerine konuşarak konuya giriş yapalım..NET 6 - WebApplicationBuilder'ı İnceleyelim‘WebHost’ ve ‘Host’ komutları sırasıyla ‘IWebHostBuilder’ ve ‘IHostBuilder’ arayüzlerinden türeyen ve bunun yanında ‘ConfigureWebHostBuilder’ ve ‘ConfigureHostBuilder’ türlerinden nesne sağlayan iki property’dirler. Her ikisi de .NET 6 öncesi kullanılan extension metotları uygulama adına çağırabilmek için kullanılırlar.

Buna en güzel örnek Serilog entegrasyonudur;

builder.Host
    .ConfigureLogging(config => config.ClearProviders())
    .UseSerilog((context, configuration) =>
    {
        configuration
        .WriteTo.Console()
        .WriteTo.File("log.txt", rollingInterval: RollingInterval.Infinite)
        .WriteTo.Seq("http://localhost:5341/");
    });

Yukarıda görüldüğü üzere .NET 6 öncesi uygulamalarda kullanılan servislerin .NET 6’da kullanılabilmesi için ‘IWebHostBuilder’ ya da ‘IHostBuilder’ arayüzleri gerekmektedir.
.NET 6 - WebApplicationBuilder'ı İnceleyelim

ConfigureHostBuilder İncelemesi

.NET 6 - WebApplicationBuilder'ı İnceleyelimWebApplicationBuilder içerisindeki ‘Host’ property’sinin(builder.Host) türü olan ConfigureHostBuilder sınıfının detayına github üzerinden göz atarsak eğer ‘IHostBuilder’ ve ‘ISupportsConfigureWebHost’ arayüzlerini uyguladığını görmekteyiz. ‘ISupportsConfigureWebHost’ arayüzü IHostBuilder ConfigureWebHost(Action configure, Action configureOptions); imzasına sahip bir metot uygulattırmakta ve mevzu bahis sınıf içerisinde ilgili metodun implemente edilmiş hali aşağıdaki gibi tasarlanmış bulunmaktadır;.NET 6 - WebApplicationBuilder'ı İnceleyelimGörüldüğü üzere ‘ConfigureWebHost’ metodu içerisinde herhangi bir operasyonel işlem barındırmamakta ve NotSupportedException hatasını fırlatmaktadır. İşte bu sebepten dolayı ConfigureHostBuilder‘ı bir host olarak kullanmaktan ziyade .NET 6 öncesi servislerin uygulamaya dahil edilmesi için kullanılmaktadır.

Burada bilinmesi gereken mühim nokta şudur ki, WebApplicationBuilder içerisindeki ‘Host’un ‘ConfigureServices’ metodu ile WebApplicationBuilder‘ın ‘Services(IServiceCollection)’ özelliği aynı nesne üzerinden işlem gördüğüdür. Yani her ikisi de aynı merkeze sahiptir. Misal olarak, aşağıdaki iki çalışma da ortak noktalar üzerinden ‘AddCors’ servisini uygulamaya farklı yollarla eklemektedirler.
‘Host.ConfigureServices’;

builder.Host.ConfigureServices(services =>
{
    services.AddCors();
});

‘Services’;

builder.Services.AddCors();

Yukarıdaki örneklerden her ikisinin de kullanılabilir olduğunu amma velakin ilkinin elverişsiz bir yapıya sahip olduğunu itiraf etmekte bir sakınca görmüyorum.

ConfigureHostBuilder‘ı sayesinde eklenen servisleri uygulamada kullanabilmek için WebApplicationBuilder(builder) nesnesinin Build edilmesi gerekmektedir. Aksi taktirde eklenen servislere erişim sağlanamayacaktır.

Bu durum IServiceCollection(builder.Services) içinde geçerlidir. Nihayetinde builder.Services üzerinden eklenen servislere de erişebilmek için build işleminin gerçekleştirilmesi gerekmektedir. Her iki türlü build işlemi neticesinde WebApplication türünden bir nesne elde edilmektedir.

BootstrapHostBuilder

BootstrapHostBuilder, WebApplicationBuilder tarafından kullanılan dahili bir IHostBuilder uygulamasıdır. ConfigureHostBuilder‘ın aksine BootstrapHostBuilder provide edilmiş delegeleri daha sonra tetiklemek için bir koleksiyona eklemektedir.

WebApplicationBuilder

WebApplicationBuilder nesnesi içerisinde, kendisini destekleye dahili bir Generic Host mevcuttur. Böylece bir adaptor mantığında hareket ederek generic host ile aynı işlevselliği göstermektedir.

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

1 Cevap

  1. 18 Aralık 2021

    […] .NET 6 – WebApplicationBuilder’ı İnceleyelim başlıklı makalede açıklandığı gibi uygulama yapılandırmasının yapıldığı yer […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.