﻿
{"id":23961,"date":"2021-12-06T01:05:23","date_gmt":"2021-12-06T01:05:23","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=23961"},"modified":"2021-12-06T01:05:23","modified_gmt":"2021-12-06T01:05:23","slug":"net-6da-yeni-gelen-webapplication-webapplicationbuilderi-eski-generic-host-ile-karsilastirma","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/net-6da-yeni-gelen-webapplication-webapplicationbuilderi-eski-generic-host-ile-karsilastirma\/","title":{"rendered":".NET 6&#8217;da Yeni Gelen WebApplication\/WebApplicationBuilder&#8217;\u0131 Eski Generic Host \u0130le Kar\u015f\u0131la\u015ft\u0131rma"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde .NET 6 ile Asp.NET Core uygulamalar\u0131na gelen <code>WebApplication<\/code> ve <code>WebApplicationBuilder<\/code> s\u0131n\u0131flar\u0131 \u00fczerine konu\u015facak ve uygulama olu\u015fturma alternatiflerinden biri  olan <code>WebApplication.CreateBuilder<\/code> komutu \u00fczerine incelemede bulunuyor olaca\u011f\u0131z.<\/p>\n<p>\u0130lk olarak, <code>WebApplication<\/code> ve <code>WebApplicationBuilder<\/code> s\u0131n\u0131flar\u0131n\u0131 anlayabilmek i\u00e7in Asp.NET Core mimarisinin .NET 6&#8217;ya kadar olan geli\u015fimsel s\u00fcrecini hasbel kader inceleyerek ba\u015flayal\u0131m;<\/p>\n<table>\n<thead>\n<tr>\n<th><\/th>\n<th style=\"text-align:left;\">S\u00fcr\u00fcm<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align:left;\"><strong><em>WebHost.CreateDefaultBuilder<\/em><\/strong><\/td>\n<td style=\"text-align:left;\"><em>Asp.NET Core 2.x<\/em><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align:left;\"><strong><em>Host.CreateDefaultBuilder<\/em><\/strong><\/td>\n<td style=\"text-align:left;\">Asp.NET Core 3.x &#8211; 5<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align:left;\"><strong><em>WebApplication.CreateBuilder<\/em><\/strong><\/td>\n<td style=\"text-align:left;\">.NET 6<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h5>WebHost.CreateDefaultBuilder(Asp.NET Core 2.x)<\/h5>\n<p>Temelden beri Asp.NET Core mimarisi, klasik Asp.NET Framework mimarisine nazaran ihtiya\u00e7 duyulmayan bir \u00f6zelli\u011fe kar\u015f\u0131 l\u00fczumsuz maliyeti reddeden bir ideolojiye sahiptir. Haliyle bu mant\u0131kta hareket eden Asp.NET Core, 2.x s\u00fcr\u00fcm\u00fcnde host i\u015flemleri(Program.cs) ile uygulama konfig\u00fcrasyonlar\u0131n\u0131(Startup.cs) birbirinden ay\u0131rm\u0131\u015ft\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\npublic class Program\r\n{\r\n    public static void Main(string&#x5B;] args)\r\n    {\r\n        BuildWebHost(args).Run();\r\n    }\r\n\r\n    public static IWebHost BuildWebHost(string&#x5B;] args) =&gt;\r\n        WebHost.CreateDefaultBuilder(args)\r\n            .UseStartup&lt;Startup&gt;()\r\n            .Build();\r\n}\r\n<\/pre>\n<h5>Host.CreateDefaultBuilder(Asp.NET Core 3.x &#8211; 5)<\/h5>\n<p>Yine ayn\u0131 ideolojiyi devam ettiren Asp.NET Core mimarisi, 3.x s\u00fcr\u00fcm\u00fcnde <code>WebHost<\/code> yerine <code>Host<\/code> \u00fczerinden yap\u0131land\u0131r\u0131larak yoluna devam etmi\u015ftir. Bu s\u00fcr\u00fcmdeki en etkili \u00f6zelliklerden biri endpoint routing middleware&#8217;inin mimariye dahil edilmesidir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\npublic class Program\r\n{\r\n    public static void Main(string&#x5B;] args)\r\n    {\r\n        CreateHostBuilder(args).Build().Run();\r\n    }\r\n    public static IHostBuilder CreateHostBuilder(string&#x5B;] args) =&gt;\r\n        Host.CreateDefaultBuilder(args)\r\n            .ConfigureWebHostDefaults(webBuilder =&gt;\r\n            {\r\n                webBuilder.UseStartup&lt;Startup&gt;();\r\n            }; \r\n    }\r\n}\r\n<\/pre>\n<h5>WebApplication.CreateBuilder(.NET 6)<\/h5>\n<p>Asp.NET Core 6&#8217;da ise ayn\u0131 ideoloji s\u00f6z konusu olsa da temelde konfig\u00fcrasyon yakla\u015f\u0131m\u0131 de\u011fi\u015ftirilmi\u015f ve &#8216;Startup.cs&#8217; dosyas\u0131 kald\u0131r\u0131larak t\u00fcm sorumluluk &#8216;Program.cs&#8217; dosyas\u0131na verilmi\u015ftir.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6da-WebApplicationBuilderi-Generic-Host-Ile-Karsilastirma.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6da-WebApplicationBuilderi-Generic-Host-Ile-Karsilastirma.png\" alt=\".NET 6&#039;da WebApplicationBuilder&#039;\u0131 Generic Host \u0130le Kar\u015f\u0131la\u015ft\u0131rma\" width=\"456\" height=\"422\" class=\"aligncenter size-full wp-image-23970\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6da-WebApplicationBuilderi-Generic-Host-Ile-Karsilastirma.png 456w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6da-WebApplicationBuilderi-Generic-Host-Ile-Karsilastirma-300x278.png 300w\" sizes=\"auto, (max-width: 456px) 100vw, 456px\" \/><\/a>Yukar\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc incelerseniz e\u011fer .NET 6&#8217;da konfig\u00fcrasyon a\u00e7\u0131s\u0131ndan <a href=\"https:\/\/www.gencayyildiz.com\/blog\/c-9-0-top-level-statements\/\" rel=\"noopener\" target=\"_blank\">Top-Level Statements<\/a>&#8216;in baz al\u0131nd\u0131\u011f\u0131 ve b\u00f6ylece uygulamada l\u00fczumsuz kod kalabal\u0131\u011f\u0131ndan s\u0131yr\u0131lman\u0131n ama\u00e7land\u0131\u011f\u0131 g\u00f6r\u00fclmekte ve ar\u0131nd\u0131r\u0131lm\u0131\u015f bir vaziyette konfig\u00fcrasyon hizmeti sunulmaktad\u0131r. Buradan anla\u015f\u0131lan, <code>using<\/code> ve <code>namespace<\/code> gibi gereksiz tan\u0131mlamalar\u0131n yap\u0131lmas\u0131 gibi konuya tam olarak a\u015fina olmayanlar i\u00e7in kafa kar\u0131\u015ft\u0131r\u0131c\u0131 konseptlerdeki zorunluluklar kald\u0131r\u0131lm\u0131\u015f ve ferah bir ba\u015flang\u0131\u00e7 ortam\u0131 sa\u011flanm\u0131\u015ft\u0131r.<\/p>\n<p>.NET 6&#8217;da ki bu sade konfig\u00fcrasyon temellerine biryandan da esas konumuz olan <code>WebApplication<\/code> ve <code>WebApplicationBuilder<\/code> t\u00fcrleri e\u015flik etmektedir. \u00d6z\u00fcnde bu t\u00fcrler olmaks\u0131z\u0131n Asp.NET Core 5&#8217;de ki generic <code>Host<\/code> ile uygulamay\u0131 rahatl\u0131kla olu\u015fturabilirdik lakin <code>WebApplication<\/code> ve <code>WebApplicationBuilder<\/code> t\u00fcrleri ile daha basit ve sade bir yakla\u015f\u0131mla uygulama temellerini atabildi\u011fimiz a\u015fikard\u0131r.<\/p>\n<p>Yukar\u0131daki g\u00f6rsele tekrar g\u00f6z atarsak e\u011fer Asp.NET Core 6 i\u00e7in 1. sat\u0131rdaki &#8216;builder&#8217; ve 9. sat\u0131rdaki &#8216;app&#8217; referanslar\u0131n\u0131n olduk\u00e7a kritik arz etti\u011fini s\u00f6yleyebiliriz.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6da-WebApplicationBuilderi-Generic-Host-Ile-Karsilastirma-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6da-WebApplicationBuilderi-Generic-Host-Ile-Karsilastirma-1.png\" alt=\".NET 6&#039;da WebApplicationBuilder&#039;\u0131 Generic Host \u0130le Kar\u015f\u0131la\u015ft\u0131rma\" width=\"370\" height=\"50\" class=\"alignleft size-full wp-image-23981\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6da-WebApplicationBuilderi-Generic-Host-Ile-Karsilastirma-1.png 370w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6da-WebApplicationBuilderi-Generic-Host-Ile-Karsilastirma-1-300x41.png 300w\" sizes=\"auto, (max-width: 370px) 100vw, 370px\" \/><\/a>&#8216;builder&#8217;, <code>WebApplicationBuilder<\/code> t\u00fcr\u00fcnden bir nesneyi referans ederken,<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6da-WebApplicationBuilderi-Generic-Host-Ile-Karsilastirma-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6da-WebApplicationBuilderi-Generic-Host-Ile-Karsilastirma-2.png\" alt=\".NET 6&#039;da WebApplicationBuilder&#039;\u0131 Generic Host \u0130le Kar\u015f\u0131la\u015ft\u0131rma\" width=\"268\" height=\"51\" class=\"alignright size-full wp-image-23982\" \/><\/a><br \/>\n&#8216;app&#8217; ise <code>WebApplication<\/code> t\u00fcr\u00fcnden bir nesneyi referans etmektedir.<\/p>\n<p>B\u00f6ylece &#8216;builder&#8217; referans\u0131 kurucu \u00f6zellik ta\u015f\u0131rken, &#8216;app&#8217; ise kurulmu\u015f hali temsil etmektedir. O y\u00fczden uygulamaya eklenecek olan servisler &#8216;builder&#8217; \u00fczerinden eklenecek, ihtiya\u00e7 olanlar ise &#8216;app&#8217; \u00fczerinden talep edilecektir. Bunun i\u00e7in her iki referans\u0131n &#8216;Service&#8217; property&#8217;sine odaklanmam\u0131z yeterlidir.<br \/>\n<div id=\"attachment_23985\" style=\"width: 442px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6da-WebApplicationBuilderi-Generic-Host-Ile-Karsilastirma-3.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-23985\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6da-WebApplicationBuilderi-Generic-Host-Ile-Karsilastirma-3.png\" alt=\".NET 6&#039;da WebApplicationBuilder&#039;\u0131 Generic Host \u0130le Kar\u015f\u0131la\u015ft\u0131rma\" width=\"432\" height=\"48\" class=\"size-full wp-image-23985\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6da-WebApplicationBuilderi-Generic-Host-Ile-Karsilastirma-3.png 432w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6da-WebApplicationBuilderi-Generic-Host-Ile-Karsilastirma-3-300x33.png 300w\" sizes=\"auto, (max-width: 432px) 100vw, 432px\" \/><\/a><p id=\"caption-attachment-23985\" class=\"wp-caption-text\">&#8216;builder.Services&#8217;\u0131n t\u00fcr\u00fc <code style=\"font-size:14px;\">IServiceCollection<\/code>&#8216;d\u0131r. Malum, \u00f6nceden Asp.NET Core tecr\u00fcbesi olan herkes bilir ki <code style=\"font-size:14px;\">IServiceCollection<\/code> bir IoC interface&#8217;idir. Haliyle buradan uygulamaya servisler eklenerek, konfig\u00fcre edilmektedir. O y\u00fczden &#8216;builder&#8217; kurucudur!<\/p><\/div><\/p>\n<div id=\"attachment_23990\" style=\"width: 373px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6da-WebApplicationBuilderi-Generic-Host-Ile-Karsilastirma-4.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-23990\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6da-WebApplicationBuilderi-Generic-Host-Ile-Karsilastirma-4.png\" alt=\".NET 6&#039;da WebApplicationBuilder&#039;\u0131 Generic Host \u0130le Kar\u015f\u0131la\u015ft\u0131rma\" width=\"363\" height=\"45\" class=\"size-full wp-image-23990\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6da-WebApplicationBuilderi-Generic-Host-Ile-Karsilastirma-4.png 363w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6da-WebApplicationBuilderi-Generic-Host-Ile-Karsilastirma-4-300x37.png 300w\" sizes=\"auto, (max-width: 363px) 100vw, 363px\" \/><\/a><p id=\"caption-attachment-23990\" class=\"wp-caption-text\">&#8216;app.Services&#8217; ise <code style=\"font-size:14px;\">IServiceProvider<\/code>&#8216;d\u0131r. Yani <code style=\"font-size:14px;\">IServiceCollection<\/code>&#8216;\u0131n build edilmi\u015f ve i\u00e7erisinde nesnelerin IoC prensibine uygun bir \u015fekilde dependency injection edilebilir bir vaziyette elde edilmesini sa\u011flayan nesnedir. O y\u00fczden &#8216;app&#8217; kurulmu\u015ftur.<\/p><\/div>\n<p>Bunlar\u0131n haricinde &#8216;appsettings.json&#8217; ya da environment gibi yap\u0131land\u0131rma verilerine eri\u015febilmek i\u00e7in <code style=\"color:purple;\">builder.Configuration<\/code> komutunu, logging i\u015flemleri i\u00e7in ise <code style=\"color:purple;\">builder.Logging<\/code> komutunu kullanabilirsiniz.<\/p>\n<p>B\u00f6ylece temel d\u00fczeyde <code>WebApplication<\/code> ve <code>WebApplicationBuilder<\/code> s\u0131n\u0131flar\u0131n\u0131 eski generic host yap\u0131lanmas\u0131yla kar\u015f\u0131la\u015ft\u0131rm\u0131\u015f ve bir nebze de olsa tan\u0131m\u0131\u015f olduk. Sonraki i\u00e7eriklerimizde .NET 6&#8217;ya dair ilgili konular\u0131m\u0131z\u0131 daha da derinle\u015ftirerek, detayl\u0131 incelemelerde bulunmaya devam edece\u011fiz.<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu i\u00e7eri\u011fimizde .NET 6 ile Asp.NET Core uygulamalar\u0131na gelen WebApplication ve WebApplicationBuilder s\u0131n\u0131flar\u0131 \u00fczerine konu\u015facak ve uygulama olu\u015fturma alternatiflerinden biri olan WebApplication.CreateBuilder komutu \u00fczerine incelemede bulunuyor olaca\u011f\u0131z. \u0130lk olarak, WebApplication ve WebApplicationBuilder s\u0131n\u0131flar\u0131n\u0131&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":23959,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4446],"tags":[4449,4466,4467,4462,4464,4463,4465,4461],"class_list":["post-23961","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net-6","tag-net-6","tag-net-6-webapplication","tag-net-6-webapplicationbuilder","tag-host-createdefaultbuilder","tag-webapplication","tag-webapplication-createbuilder","tag-webapplicationbuilder","tag-webhost-createdefaultbuilder"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/23961","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=23961"}],"version-history":[{"count":27,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/23961\/revisions"}],"predecessor-version":[{"id":23993,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/23961\/revisions\/23993"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/23959"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=23961"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=23961"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=23961"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}